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

सी ++ में बिना रिकर्सन और स्टैक के बाइनरी ट्री का पोस्टऑर्डर ट्रैवर्सल

इस समस्या में हमें एक Binary tree दिया जाता है। हमारा कार्य पुनरावृत्ति और स्टैक के बिना का उपयोग किए बिना बाइनरी ट्री के पोस्टऑर्डर ट्रैवर्सल को प्रिंट करना है ।

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

सी ++ में बिना रिकर्सन और स्टैक के बाइनरी ट्री का पोस्टऑर्डर ट्रैवर्सल

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

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

रिकर्सन और स्टैक का उपयोग किए बिना पेड़ को पार करने के लिए। हम गहराई से पहली खोज आधारित तकनीक करेंगे और डेटा को हैश तालिका . में संग्रहीत किया जाएगा ।

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   struct Node *left, *right;
};
void postOrderTraversal(struct Node* head) {
   struct Node* temp = head;
   unordered_set<Node*> visited;
   while (temp && visited.find(temp) == visited.end()) {
      if (temp->left &&
         visited.find(temp->left) == visited.end())
         temp = temp->left;
      else if (temp->right &&
         visited.find(temp->right) == visited.end())
         temp = temp->right;
      else {
         cout<<temp->data<<"\t";
         visited.insert(temp);
         temp = head;
      }
   }
}
struct Node* insertNode(int data){
   struct Node* node = new Node;
   node->data = data;
   node->left = NULL;
   node->right = NULL;
   return (node);
}
int main(){
   struct Node* root = insertNode(6);
   root->left = insertNode(2);
   root->right = insertNode(9);
   root->left->left = insertNode(8);
   root->left->right = insertNode(4);
   root->right->left = insertNode(7);
   root->right->left->left = insertNode(13);
   cout<<"Post Order Traversal of the binary tree :\n";
   postOrderTraversal(root);
   return 0;
}

आउटपुट

Post Order Traversal of the binary tree :
8    4    2    13    7    9    6

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

एक अधिक प्रभावी समाधान एक अनियंत्रित मानचित्र का उपयोग कर रहा है, यह ट्रैकबैक के ऊपरी हिस्से को सिर पर कम कर देगा।

उदाहरण

कार्यान्वयन दिखाने के लिए कार्यक्रम

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   struct Node *left, *right;
   bool visited;
};
void postOrderTraversal(Node* root) {
   Node* n = root;
   unordered_map<Node*, Node*> postorder;
   postorder.insert(pair<Node*, Node*>(root, nullptr));
   while (n) {
      if (n->left && postorder.find(n->left) == postorder.end()) {
         postorder.insert(pair<Node*, Node*>(n->left, n));
         n = n->left;
      }
      else if (n->right && postorder.find(n->right) == postorder.end()) {
         postorder.insert(pair<Node*, Node*>(n->right, n));
         n = n->right;
      }
      else {
         cout<<n->data<<"\t";
         n = (postorder.find(n))->second;
      }
   }
}
struct Node* insertNode(int data) {
   struct Node* node = new Node;
   node->data = data;
   node->left = NULL;
   node->right = NULL;
   node->visited = false;
   return (node);
}
int main() {
   struct Node* root = insertNode(6);
   root->left = insertNode(2);
   root->right = insertNode(9);
   root->left->left = insertNode(8);
   root->left->right = insertNode(4);
   root->right->left = insertNode(7);
   root->right->left->left = insertNode(13);
   cout<<"Post Order Traversal of the binary tree :\n";
   postOrderTraversal(root);
   return 0;
}

आउटपुट

Post Order Traversal of the binary tree :
8    4    2    13    7    9    6

  1. सी ++ में एक बाइनरी पेड़ के एंटी क्लॉकवाइज सर्पिल ट्रैवर्सल?

    एक बाइनरी ट्री का एंटी-क्लॉकवाइज स्पाइरल ट्रैवर्सल एक पेड़ के तत्वों को इस तरह से ट्रेस कर रहा है कि अगर ट्रैवर्स किया जाए तो वे एक सर्पिल बनाते हैं लेकिन उल्टे क्रम में। निम्न चित्र दिखाता है कि बाइनरी ट्री का घड़ी की विपरीत दिशा में सर्पिल ट्रैवर्सल कैसे होता है। बाइनरी ट्री के सर्पिल ट्रैवर्सल

  1. सी ++ प्रोग्राम किसी दिए गए बाइनरी ट्री के पोस्टऑर्डर रिकर्सिव ट्रैवर्सल करने के लिए

    ट्री ट्रैवर्सल ग्राफ ट्रैवर्सल का एक रूप है। इसमें पेड़ में प्रत्येक नोड को ठीक एक बार जांचना या प्रिंट करना शामिल है। बाइनरी सर्च ट्री के पोस्टऑर्डर ट्रैवर्सल में ट्री में प्रत्येक नोड को क्रम (बाएं, दाएं, रूट) में जाना शामिल है। बाइनरी ट्री के पोस्टऑर्डर ट्रैवर्सल का एक उदाहरण इस प्रकार है। एक ब

  1. पायथन में बाइनरी ट्री पोस्टऑर्डर ट्रैवर्सल

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है। हमें पुनरावृत्त दृष्टिकोण का उपयोग करके इस पेड़ के पोस्ट ऑर्डर ट्रैवर्सल को खोजना होगा। तो अगर पेड़ जैसा है - तब आउटपुट होगा:[9,15,7,10,-10] इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - यदि रूट शून्य है, तो खाली सरणी लौटाएं एक सरणी रिट बनाएं