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

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


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

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

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

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

उपरोक्त ट्री का पोस्टऑर्डर ट्रैवर्सल - 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<<"बाइनरी ट्री का पोस्ट ऑर्डर ट्रैवर्सल :\n";    postOrderTraversal(root);    return 0; }

आउटपुट

बाइनरी ट्री का पोस्ट ऑर्डर ट्रैवर्सल : 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<<"बाइनरी ट्री का पोस्ट ऑर्डर ट्रैवर्सल :\n";    postOrderTraversal(root);    return 0; }

आउटपुट

बाइनरी ट्री का पोस्ट ऑर्डर ट्रैवर्सल : 8 4 2 13 7 9 6

  1. C++ में बाइनरी ट्री का एंटी-क्लॉकवाइज स्पाइरल ट्रैवर्सल C++ में बाइनरी ट्री का एंटी-क्लॉकवाइज स्पाइरल ट्रैवर्सल

    बाइनरी ट्री का एंटी-क्लॉकवाइज स्पाइरल ट्रैवर्सल एक ट्री के तत्वों को इस तरह से पार करना है कि यदि पार किया जाए तो वे एक स्पाइरल बनाते हैं लेकिन रिवर्स ऑर्डर में। निम्नलिखित आकृति दिखाती है कि बाइनरी ट्री का एंटी-क्लॉकवाइज स्पाइरल ट्रैवर्सल कैसे होता है। बाइनरी ट्री के स्पाइरल ट्रैवर्सल के लिए परिभ

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

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

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

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