Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Javascript

जावास्क्रिप्ट ट्री में एक नोड को हटाना


यदि आप दूर से देखें तो पेड़ से नोड को हटाना काफी जटिल है। नोड को हटाते समय विचार करने के लिए 3 मामले हैं। निम्नलिखित फ़ंक्शन की टिप्पणी में इनका उल्लेख किया गया है। जैसा कि हम पहले करते रहे हैं, हम कक्षा में एक विधि और पुनरावर्ती कॉल करने के लिए एक सहायक बनाएंगे।

कक्षा पद्धति

deleteNode(key) {// यदि कोई नोड सफलतापूर्वक हटा दिया जाता है, तो एक संदर्भ प्राप्त होगा। वापसी !(deleteNodeHelper(this.root, key) ===false);}

सहायक विधि

/** * रूट और कुंजी लेता है और कुंजी के लिए पुनरावर्ती खोज करता है। * यदि यह कुंजी पाता है, तो 3 मामले हो सकते हैं:* * 1. यह नोड एक लीफ नोड है। * *उदाहरण:F * A * / \ * B C * / / \ * D E F * * को हटाने के लिए, हम इसके माता-पिता के कनेक्शन को आसानी से हटा सकते हैं। * *ए */\ * बी सी *//* डी ई * * 2. यह नोड कहीं एक बच्चे के साथ पेड़ के बीच में है। * * उदाहरण:बी * ए * / \ * बीसी * / / \ * डीईएफ * * को हटाने के लिए, हम उपरोक्त कनेक्शन में केवल चाइल्ड नोड को पैरेंट नोड की जगह ले सकते हैं * ए * / \ * डीसी * / \ * EF * * 3. इस नोड में दोनों बच्चे हैं। यह पेचीदा मामला है। * * उदाहरण:सी * * ए * / \ * बीसी * / / \ * डीईएफ * / / \ * जीएचआई * * को हटाना इस मामले में, हमें नोड के उत्तराधिकारी या पूर्ववर्ती को ढूंढना होगा और इस नोड को इसके साथ बदलना होगा * वह। उदाहरण के लिए, यदि हम उत्तराधिकारी के साथ जाते हैं, तो इसका उत्तराधिकारी इससे बड़ा तत्व होगा, * यानी, सही उपट्री में न्यूनतम तत्व। तो हटाने के बाद, पेड़ इस तरह दिखेगा:* * ए * / \ * बीएच * / / \ * डीईएफ * / \ * जीआई * * इस तत्व को हटाने के लिए, हमें उत्तराधिकारी के माता-पिता को खोजने की जरूरत है, उनके लिंक को तोड़ दें, उत्तराधिकारी के बाएँ * और दाएँ बिंदु को वर्तमान नोड के बाएँ और दाएँ बिंदु बनाएँ। आसान तरीका यह है कि नोड से डेटा को केवल * उत्तराधिकारी से हटा दिया जाए और उत्तराधिकारी को हटा दिया जाए। } अगर (कुंजी  रूट.डेटा) {root.right =deleteNodeHelper(root.right, key); वापसी जड़; } और {// नो चिल्ड्रन // केस 1 - एक लीफ नोड अगर (रूट। लेफ्ट ===नल &&रूट। राइट ===नल) {रूट =नल; वापसी जड़; } // सिंगल चाइल्ड केस अगर (root.left ===null) root.right लौटाते हैं; अगर (रूट। राइट ===नल) रूट लौटाएं। बाएं; // दोनों बच्चे, इसलिए उत्तराधिकारी खोजने की जरूरत है currNode =root.right; जबकि (currNode.left!==null) { currNode =currNode.left; } root.data =currNode.data; // राइट सबट्री से वैल्यू डिलीट करें। root.right =deleteNodeHelper (root.right, currNode.data); वापसी जड़; }} 

आप इसका परीक्षण कर सकते हैं -

उदाहरण

 बीएसटी =नया बाइनरीसर्च ट्री (); बीएसटी.insertRec (10); BST.insertRec (15); BST.insertRec (5); BST.insertRec (50); BST.insertRec (3); BST.insertRec ( 7); BST.insertRec(12); BST.inOrder();BST.deleteNode(15);BST.deleteNode(10);BST.deleteNode(3);BST.inOrder();

आउटपुट

यह आउटपुट देगा -

571250

  1. डेटा संरचनाओं में बाइनरी ट्री ट्रैवर्सल

    इस खंड में हम बाइनरी सर्च ट्री में मौजूद ट्रैवर्स कीज़ के लिए अलग-अलग ट्रैवर्सल एल्गोरिदम देखेंगे। ये ट्रैवर्सल इनऑर्डर ट्रैवर्सल, प्रीऑर्डर ट्रैवर्सल, पोस्टऑर्डर ट्रैवर्सल और लेवल ऑर्डर ट्रैवर्सल हैं। मान लीजिए हमारे पास एक ऐसा पेड़ है - इनऑर्डर ट्रैवर्सल अनुक्रम इस तरह होगा - 5 8 10 15 16 20 2

  1. पायथन में एक एन-आरी पेड़ की जड़ खोजने का कार्यक्रम

    मान लीजिए, हमें एक सरणी में n-ary पेड़ के नोड दिए गए हैं। हमें पेड़ के रूट नोड को फिर से ढूंढकर वापस करना है। पूर्ण वृक्ष को पूर्व-आदेश संकेतन में लौटाए गए नोड से प्रदर्शित किया जाना है। तो, अगर इनपुट पसंद है तो आउटपुट होगा [14, 27, 32, 42, 56, 65] हम पेड़ के पूर्व-आदेश ट्रैवर्सल को प्रदर्शित क

  1. पायथन में एक पेड़ के सबसे गहरे नोड को खोजने का कार्यक्रम

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें सबसे गहरे नोड का मान ज्ञात करना होगा। यदि एक से अधिक गहरे नोड हैं, तो सबसे बाएं सबसे गहरे नोड को वापस करें। तो, अगर इनपुट पसंद है तो आउटपुट 4 होगा क्योंकि 4 और 7 सबसे गहरे हैं लेकिन 4 सबसे ज्यादा बचे हैं। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे