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

C++ में प्रीऑर्डर ट्रैवर्सल से ट्री पुनर्प्राप्त करना

मान लीजिए एक बाइनरी ट्री है। हम बाइनरी ट्री की रूट पर एक प्रीऑर्डर डेप्थ फर्स्ट सर्च चलाएंगे।

इस ट्रैवर्सल में प्रत्येक नोड पर, आउटपुट D संख्या में डैश होगा (यहां D इस नोड की गहराई है), उसके बाद हम इस नोड का मान प्रदर्शित करते हैं। जैसा कि हम जानते हैं यदि किसी नोड की गहराई D है, तो उसके तत्काल बच्चे की गहराई D+1 है और रूट नोड की गहराई 0 है।

एक और बात ध्यान रखनी है कि यदि किसी नोड का केवल एक बच्चा है, तो वह बच्चा बायां बच्चा होने की गारंटी है। इसलिए, यदि इस ट्रैवर्सल का आउटपुट S दिया गया है, तो ट्री को पुनर्प्राप्त करें और उसकी रूट लौटाएं।

यदि इनपुट "1-2--3--4-5--6--7" है, तो आउटपुट होगा -

C++ में प्रीऑर्डर ट्रैवर्सल से ट्री पुनर्प्राप्त करना

हल करने के चरण

  • एक स्टैक st परिभाषित करें

  • i := 0, n := S का आकार

  • lvl := 0, num := 0

  • जब तक i < n: डैश गिनकर lvl ज्ञात करें, फिर संख्या पढ़ें

  • जब तक स्टैक का आकार > lvl: स्टैक से पॉप करें

  • num मान के साथ नया ट्री नोड बनाएं

  • यदि स्टैक खाली नहीं है और शीर्ष का बायां बच्चा खाली है तो बायां बच्चा सेट करें, अन्यथा दायां बच्चा सेट करें

  • नोड को स्टैक में पुश करें

  • अंत में स्टैक से तब तक पॉप करें जब तक आकार 1 न हो जाए, शीर्ष तत्व लौटाएं

उदाहरण

#include <bits/stdc++.h> 
using namespace std; 

class TreeNode { 
public: 
    int val; 
    TreeNode *left, *right; 
    TreeNode(int data) { 
        val = data; 
        left = NULL; 
        right = NULL; 
    } 
}; 

void inord(TreeNode *root) { 
    if(root != NULL) { 
        inord(root->left); 
        cout << root->val << " "; 
        inord(root->right); 
    } 
} 

class Solution { 
public: 
    TreeNode* recoverFromPreorder(string S) { 
        stack<TreeNode*> st; 
        int i = 0; 
        int n = S.size(); 
        int lvl = 0; 
        int num = 0; 
        while (i < n) { 
            for (lvl = 0; S[i] == '-'; lvl++, i++); 
            num = 0; 
            while (i < n && S[i] != '-') { 
                num = num * 10 + (S[i] - '0'); 
                i++; 
            } 
            while (st.size() > lvl) st.pop(); 
            TreeNode* temp = new TreeNode(num); 
            if (!st.empty() && !st.top()->left) { 
                st.top()->left = temp; 
            } else if (!st.empty()) { 
                st.top()->right = temp; 
            } 
            st.push(temp); 
        } 
        while (st.size() > 1) st.pop(); 
        return st.empty() ? NULL : st.top(); 
    } 
}; 

int main() { 
    Solution ob; 
    TreeNode *root = ob.recoverFromPreorder("1-2--3--4-5--6--7"); 
    inord(root); 
    return 0; 
}

इनपुट

"1-2--3--4-5--6--7"

आउटपुट

3 2 4 1 6 5 7
  1. C++ प्रोग्राम: बाइनरी ट्री का प्रीऑर्डर नॉन-रिकर्सिव ट्रैवर्सल C++ प्रोग्राम: बाइनरी ट्री का प्रीऑर्डर नॉन-रिकर्सिव ट्रैवर्सल

    ट्री ट्रैवर्सल ग्राफ ट्रैवर्सल का एक रूप। ट्री के प्रत्येक नोड को ठीक एक बार चेक/प्रिंट करना शामिल है। प्रीऑर्डर ट्रैवर्सल क्रम: रूट → बाएं → दाएं। बाइनरी ट्री उदाहरण Preorder Traversal: 5 3 2 4 8 9 C++ प्रोग्राम उदाहरण (इटरेटिव/नॉन-रिकर्सिव) left); } } struct Node* insertNode(struct Node*

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

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

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

    मान लीजिए हमें एक बाइनरी सर्च ट्री बनाना है जो दिए गए प्रीऑर्डर ट्रैवर्सल से मेल खाता हो। इसलिए यदि प्री-ऑर्डर ट्रैवर्सल [8,5,1,7,10,12] जैसा है, तो आउटपुट [8,5,10,1,7,null,12] होगा, इसलिए ट्री होगा -इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -root := प्रीऑर्डर ट्रैवर्सल लिस्ट का 0वां नोडstack :