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

सी++ में बाइनरी ट्री में नोड का पोस्टऑर्डर उत्तराधिकारी


इस समस्या में, हमें एक बाइनरी ट्री और नोड दिया जाता है। हमारा काम बाइनरी ट्री में नोड के पोस्टऑर्डर उत्तराधिकारी को प्रिंट करना है।

बाइनरी पेड़ एक विशेष प्रकार का पेड़ है जिसमें प्रत्येक नोड में अधिकतम 2 चाइल्ड नोड हो सकते हैं।

सी++ में बाइनरी ट्री में नोड का पोस्टऑर्डर उत्तराधिकारी

पोस्टऑर्डर ट्रैवर्सल एक ट्री ट्रैवर्सल तकनीक है, जिसमें पहले बाएँ सबट्री को राइट सबट्री की तुलना में ट्रेस किया जाता है और अंत में रूट को ट्रैवर्स किया जाता है।

उपरोक्त पेड़ का पोस्टऑर्डर ट्रैवर्सल:8 4 2 7 9 6

समस्या को समझने के लिए एक उदाहरण लेते हैं।

इनपुट - ऊपर के उदाहरण में बाइनरी ट्री, नोड =7

आउटपुट - 9

स्पष्टीकरण - हम इसे बाइनरी ट्री के पोस्ट-ऑर्डर ट्रैवर्सल में देख सकते हैं।

इस समस्या को हल करने के लिए, एक सरल, आसान और नोब का समाधान बस पोस्टऑर्डर ट्रैवर्सल ढूंढना होगा और फिर ट्रैवर्सल में उसके आगे की संख्या को प्रिंट करना होगा।

लेकिन हमें एक अधिक प्रभावी समाधान सीखने की जरूरत है,

एक प्रभावी समाधान में पोस्टऑर्डर ट्रैवर्सल पर कुछ सामान्य अवलोकन का उपयोग करना शामिल होगा।

  • चूंकि रूट पोस्टऑर्डर ट्रैवर्सल में अंतिम नोड है, इसलिए इसका उत्तराधिकारी NULL है।

  • वर्तमान नोड के सही बच्चे होने की स्थिति में, पैरेंट नोड उत्तराधिकारी होता है।

  • वर्तमान नोड के बच्चे छोड़े जाने की स्थिति में, तब

    • अगर सही भाई-बहन अनुपस्थित है, तो उत्तराधिकारी पैरेंट नोड होता है

    • यदि दायां भाई मौजूद है तो या तो नोड या उसका सबसे बायां बच्चा उत्तराधिकारी है।

यह विधि प्रभावी है, समय जटिलता O(h), उसके पेड़ की ऊंचाई है।

उदाहरण

हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम,

#include <iostream>
using namespace std;
struct Node {
   struct Node *left, *right, *parent;
   int value;
};
struct Node* insertNode(int value) {
   Node* temp = new Node;
   temp->left = temp->right = temp->parent = NULL;
   temp->value = value;
   return temp;
}
Node* findPostorderSuccessor(Node* root, Node* n) {
   if (n == root)
      return NULL;
   Node* parent = n->parent;
   if (parent->right == NULL || parent->right == n)
      return parent;
   Node* curr = parent->right;
   while (curr->left != NULL)
      curr = curr->left;
   return curr;
}
int main(){
   struct Node* root = insertNode(6);
   root->parent = NULL;
   root->left = insertNode(2);
   root->left->parent = root;
   root->left->left = insertNode(8);
   root->left->left->parent = root->left;
   root->left->right = insertNode(4);
   root->left->right->parent = root->left;
   root->right = insertNode(9);
   root->right->parent = root;
   root->right->left = insertNode(7);
   root->right->left->parent = root->right;
   root->left->right->left = insertNode(14);
   struct Node* successorNode = findPostorderSuccessor(root, root->left->right);
   if (successorNode)
      cout<<"Postorder successor of "<<root->left->right->value<<" is "<<successorNode->value;
   else
      cout<<"Postorder successor of "<<root->left->right->value<<" is NULL";
   return 0;
}

आउटपुट

Postorder successor of 4 is 2

  1. सी ++ में बाइनरी ट्री में नोड के पूर्ववर्ती पूर्ववर्ती

    इस समस्या में, हमें एक बाइनरी ट्री और एक नोड मान दिया जाता है। हमारा काम नोड के पूर्व-आदेश को प्रिंट करना है। बाइनरी ट्री एक विशेष प्रकार का पेड़ है जिसमें प्रत्येक रूट नोड में अधिकतम 2 चाइल्ड नोड हो सकते हैं। ट्रैवर्सल अग्रिम-आदेश पेड़ के नोड्स को पार करने का एक तरीका है। इसमें हम पहले रूट नोड,

  1. C++ में बाइनरी ट्री में नोड का प्रीऑर्डर उत्तराधिकारी

    इस समस्या में, हमें एक बाइनरी ट्री और एक नोड मान दिया जाता है। हमारा काम नोड के प्रीऑर्डर सक्सेसर को प्रिंट करना है। बाइनरी ट्री एक विशेष प्रकार का पेड़ है जिसमें प्रत्येक रूट नोड में अधिकतम 2 चाइल्ड नोड हो सकते हैं। ट्रैवर्सल अग्रिम-आदेश पेड़ के नोड्स को पार करने का एक तरीका है। इसमें हम पहले रूट

  1. C++ में एक बाइनरी ट्री में अधिकतम पथ योग

    इस समस्या में, हमें एक बाइनरी ट्री दिया जाता है जिसमें प्रत्येक नोड में एक मान होता है। हमारा काम एक बाइनरी ट्री की दो पत्तियों के बीच अधिकतम पथ योग खोजने के लिए एक प्रोग्राम बनाना है। यहां, हमें एक लीफ नोड से दूसरे लीफ नोड के लिए पथ फॉर्म ढूंढना होगा जो अधिकतम मूल्यों को प्रदान करेगा। इस अधिकतम यो