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

C++ प्रोग्राम में k मान के साथ लीफ नोड्स हटाएं

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

आइए समस्या को हल करने के लिए चरणों को देखें।

  • बाइनरी ट्री के लिए एक स्ट्रक्चर नोड लिखें।

  • पेड़ के माध्यम से ट्रैवर्स (इनऑर्डर, प्रीऑर्डर, पोस्टऑर्डर) के लिए एक फ़ंक्शन लिखें और सभी डेटा प्रिंट करें।

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

  • x मान प्रारंभ करें।

  • दिए गए मान के साथ लीफ नोड्स को हटाने के लिए एक फ़ंक्शन लिखें। यह दो तर्क रूट नोड और k मान को स्वीकार करता है।

    • यदि रूट एक शून्य वापसी है।

    • हटाने के बाद रूट के बाएं नोड को एक नए रूट से बदलें।

    • रूट के दाहिने नोड के साथ भी।

    • यदि वर्तमान रूट नोड डेटा k के बराबर है और यह एक लीफ नोड है, तो एक नल पॉइंटर लौटाएं।

    • रूट नोड लौटाएं

उदाहरण

आइए कोड देखें।

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   struct Node *left, *right;
};
struct Node* newNode(int data) {
   struct Node* newNode = new Node;
   newNode->data = data;
   newNode->left = newNode->right = NULL;
   return newNode;
}
Node* deleteLeafNodes(Node* root, int k) {
   if (root == NULL) {
      return nullptr;
   }
   root->left = deleteLeafNodes(root->left, k);
   root->right = deleteLeafNodes(root->right, k);
   // checking the current node data with k
   if (root->data == k && root->left == NULL && root->right == NULL) {
      // deleting the node
      return nullptr;
   }
   return root;
}
void inorder(Node* root) {
   if (root == NULL) {
      return;
   }
   inorder(root->left);
   cout << root->data << " ";
   inorder(root->right);
}
int main(void) {
   struct Node* root = newNode(1);
   root->left = newNode(2);
   root->right = newNode(3);
   root->left->left = newNode(3);
   root->left->right = newNode(4);
   root->right->right = newNode(5);
   root->right->left = newNode(4);
   root->right->right->left = newNode(4);
   root->right->right->right = newNode(4);
   deleteLeafNodes(root, 4);
   cout << "Tree: ";
   inorder(root);
   cout << endl;
   return 0;
}

आउटपुट

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

Tree: 3 2 1 3 5

निष्कर्ष

यदि ट्यूटोरियल में आपके कोई प्रश्न हैं, तो उनका टिप्पणी अनुभाग में उल्लेख करें।


  1. सी ++ में बीएसटी में नोड हटाएं

    मान लीजिए कि हमारे पास एक बाइनरी सर्च ट्री है। हम एक कुंजी k लेंगे, और हमें दिए गए कुंजी k को BST से हटाना होगा, और अद्यतन BST को वापस करना होगा। तो अगर पेड़ जैसा है - और कुंजी k =3, तो आउटपुट ट्री होगा - इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - रूट नोड को हटाने के लिए deleteR

  1. सी ++ में सापेक्ष स्थिति के साथ सभी रूट को पत्ती पथ पर प्रिंट करें

    इस समस्या में हमें एक बाइनरी ट्री दिया जाता है। और हमें जड़ से लेकर पेड़ के पत्ते तक के सभी रास्तों को प्रिंट करना होता है। साथ ही, नोड्स की सापेक्ष स्थिति दिखाने के लिए अंडरस्कोर “_” जोड़ें। आइए विषय को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं - इनपुट - आउटपुट - _ _ 3 _ 9 1 _3 9 _7 3 _ 4

  1. सी ++ का उपयोग करके रिकर्सन का उपयोग किए बिना रूट टू लीफ पथ को प्रिंट करने का कार्यक्रम

    इस ट्यूटोरियल में, हम किसी दिए गए बाइनरी ट्री में रूट नोड से सभी लीफ नोड्स तक पाथ प्रिंट करने के लिए एक प्रोग्राम पर चर्चा करेंगे। उदाहरण के लिए, मान लें कि हमारे पास निम्न बाइनरी ट्री है इस बाइनरी ट्री में, हमारे पास 4 लीफ नोड्स हैं। इसलिए हमारे पास रूट नोड से लीफ नोड तक 4 पथ हो सकते हैं। इसे