Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ प्रोग्राम में बाइनरी ट्री में डिलीशन


इस ट्यूटोरियल में, हम सीखेंगे कि बाइनरी ट्री में नोड को कैसे हटाया जाए।

बाइनरी ट्री में नोड्स बाइनरी सर्च ट्री की तरह किसी क्रम का पालन नहीं करते हैं। तो बाइनरी ट्री में नोड हटाने के बाद नोड्स को कैसे व्यवस्थित करें?

खैर, हम ट्री के सबसे गहरे नोड को हटाए जा रहे नोड से बदल देंगे। और फिर हम सबसे गहरे नोड को नोड से हटा देंगे।

समस्या को हल करने के चरण देखते हैं।

  • बाइनरी नोड स्ट्रक्चर के साथ ट्री को इनिशियलाइज़ करें।

  • ट्री के नोड्स प्रिंट करने के लिए एक फंक्शन लिखें (प्रीऑर्डर, इनऑर्डर, और पोस्टऑर्डर)।

  • नोड हटाने के लिए एक फंक्शन लिखें।

    • ट्री के माध्यम से पुनरावृति करने के लिए एक क्यू इनिशियलाइज़ करें।

    • क्यू खाली होने तक पुनरावृति करें।

    • दिए गए की के साथ नोड खोजें और इसे एक वेरिएबल में स्टोर करें।

    • और क्यू से अंतिम नोड सबसे गहरा नोड है।

  • दूसरे फंक्शन का उपयोग करके सबसे गहरे नोड को हटाएं।

    • ट्री के माध्यम से ट्रैवर्स करने के लिए क्यू का उपयोग करें।

    • जब हमें नोड मिले तो इसे हटाएं और लौटाएं।

  • ट्री प्रिंट करें ताकि पता चल सके कि नोड हटाया गया है या नहीं।

उदाहरण

कोड देखते हैं।

#include <bits/stdc++.h> using namespace std; struct Node {    int data;    struct Node *left, *right; }; struct Node* newNode(int data) {    struct Node* temp = new Node;    temp->data = data;    temp->left = temp->right = NULL;    return temp; }; void inorder(struct Node* node) {    if (node == NULL) {       return;    }    inorder(node->left);    cout << node->data << " ";    inorder(node->right); } void deleteDeepestNode(struct Node* root, struct Node* deleting_node){    queue<struct Node*> nodes;    nodes.push(root);    struct Node* temp;    while (!nodes.empty()) {       temp = nodes.front();       nodes.pop();       if (temp == deleting_node) {          temp = NULL;          delete (deleting_node);          return;       }       if (temp->right) {          if (temp->right == deleting_node) {             temp->right = NULL;             delete deleting_node;             return;          }          else {             nodes.push(temp->right);          }       }       if (temp->left) {          if (temp->left == deleting_node) {             temp->left = NULL;             delete deleting_node;             return;          }          else {             nodes.push(temp->left);          }       }    } } Node* deleteNode(struct Node* root, int key) {    if (root == NULL){       return NULL;    }    if (root->left == NULL && root->right == NULL) {       if (root->data == key) {          return NULL;       }       else {          return root;       }    }    queue<struct Node*> nodes;    nodes.push(root);    struct Node* temp;    struct Node* key_node = NULL;    while (!nodes.empty()) {       temp = nodes.front();       nodes.pop();       if (temp->data == key) {          key_node = temp;       }       if (temp->left) {          nodes.push(temp->left);       }       if (temp->right) {          nodes.push(temp->right);       }    }    if (key_node != NULL) {       int deepest_node_data = temp->data;       deleteDeepestNode(root, temp);       key_node->data = deepest_node_data;    }    return root; } int main() {    struct Node* root = newNode(1);    root->left = newNode(2);    root->left->left = newNode(3);    root->left->right = newNode(4);    root->right = newNode(5);    root->right->left = newNode(6);    root->right->right = newNode(7);    root->right->left->left = newNode(8);    root->right->left->right = newNode(9);    cout << "Tree before deleting key: ";    inorder(root);    int key = 5;    root = deleteNode(root, key);    cout << "\nTree after deleting key: ";    inorder(root);    cout << endl;    return 0; }

आउटपुट

यदि आप उपरोक्त कोड चलाते हैं, तो आपको निम्न परिणाम मिलेगा।

Tree before deleting key: 3 2 4 1 8 6 9 5 7 Tree after deleting key: 3 2 4 1 8 6 9 7

निष्कर्ष

यदि ट्यूटोरियल में आपके कोई प्रश्न हैं, तो उन्हें कमेंट सेक्शन में बताएं।


  1. C++ में बाइनरी ट्री प्रिंट करना C++ में बाइनरी ट्री प्रिंट करना

    मान लीजिए हमें एक बाइनरी ट्री को m×n 2D स्ट्रिंग सरणी में इन नियमों के आधार पर प्रदर्शित करना है: पंक्ति संख्या m दी गई बाइनरी ट्री की ऊंचाई के समान होनी चाहिए। स्तंभ संख्या n हमेशा एक विषम संख्या होनी चाहिए। रूट नोड का मान पहली पंक्ति के ठीक बीच में रखा जाना चाहिए जहां इसे रखा जा सकता है। वह स्तं

  1. C++ में बाइनरी ट्री प्रूनिंग C++ में बाइनरी ट्री प्रूनिंग

    मान लीजिए हमारे पास एक बाइनरी ट्री का हेड नोड root है, जहाँ प्रत्येक नोड का मान या तो 0 या 1 है। हमें वही ट्री लौटाना है जहाँ हर वह सबट्री हटा दी गई हो जिसमें 1 नहीं है। उदाहरण: इनपुट ट्री [1,1,0,1,1,0,1,0] के लिए, आउटपुट ट्री में केवल वही नोड्स रहेंगे जिनके सबट्री में कम से कम एक 1 है। पोस्ट-ऑर्

  1. C++ में बाइनरी खोज प्रोग्राम C++ में बाइनरी खोज प्रोग्राम

    बाइनरी खोज क्या है? बाइनरी खोज (आधा-अंतराल खोज) एक खोज एल्गोरिदम है जो क्रमबद्ध सरणी में लक्ष्य मान की स्थिति ढूंढता है। यह लक्ष्य मान की तुलना मध्य तत्व से करता है और खोज स्थान को आधा कर देता है। मुख्य बिंदु केवल क्रमबद्ध सरणी पर काम करता है समय जटिलता: O(log n) दुनिया के सभी नाम क्रमबद्ध हों तो