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

C++ में दिए गए प्रीऑर्डर ट्रैवर्सल से BST का निर्माण (सेट 2)


मान लीजिए हमारे पास एक प्रीऑर्डर ट्रैवर्सल है। इस ट्रैवर्सल से हमें ट्री उत्पन्न करना है। तो यदि ट्रैवर्सल [10, 5, 1, 7, 40, 50] जैसा है, तो ट्री इस तरह होगा -

C++ में दिए गए प्रीऑर्डर ट्रैवर्सल से BST का निर्माण (सेट 2)

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • खाली स्टैक बनाएं

  • पहले मान को रूट बनाएं, और इसे स्टैक में पुश करें।

  • अब स्टैक खाली न होने और अगला मान स्टैक के शीर्ष तत्व से बड़ा होने तक पॉप करते रहें, इसे अंतिम पॉप किए गए नोड का राइट चाइल्ड बनाएं। अब नए नोड को स्टैक में पुश करें।

  • जब अगला मान शीर्ष तत्व से कम हो, तो इसे स्टैक के शीर्ष तत्व का लेफ्ट चाइल्ड बनाएं। अब नए नोड को स्टैक में पुश करें।

  • चरण 2 और 3 को तब तक दोहराएं जब तक हमने प्रीऑर्डर सूची के सभी तत्वों की जांच नहीं कर ली।

उदाहरण

#include <iostream> 
#include <stack> 
using namespace std; 

class node {
public:
    int data;
    node *left;
    node *right;
};

node* getNode(int data) {
    node* temp = new node();
    temp->data = data;
    temp->left = temp->right = NULL;
    return temp;
}

node* constructTree(int pre[], int size) {
    stack stk;
    node* root = getNode(pre[0]);
    stk.push(root);
    int i;
    node* temp;
    
    for (i = 1; i < size; ++i) {
        temp = NULL;
        while (!stk.empty() && pre[i] > stk.top()->data) {
            temp = stk.top();
            stk.pop();
        }
        if (temp != NULL) {
            temp->right = getNode(pre[i]);
            stk.push(temp->right);
        } else {
            node* peek_node = stk.top();
            peek_node->left = getNode(pre[i]);
            stk.push(stk.top()->left);
        }
    }
    return root;
}

void inord(node* node) {
    if (node == NULL)
        return;
    inord(node->left);
    cout << node->data << " ";
    inord(node->right);
}

int main() {
    int pre[] = {10, 5, 1, 7, 40, 50};
    int size = sizeof(pre) / sizeof(pre[0]);
    node* root = constructTree(pre, size);
    cout << "Inorder traversal: ";
    inord(root);
}

आउटपुट

Inorder traversal: 1 5 7 10 40 50

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

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

  1. पायथन में स्टैक का उपयोग करके पोस्टऑर्डर ट्रैवर्सल से BST बनाना पायथन में स्टैक का उपयोग करके पोस्टऑर्डर ट्रैवर्सल से BST बनाना

    समस्या विवरण बाइनरी सर्च ट्री का पोस्टऑर्डर ट्रैवर्सल दिया गया है, उससे BST पुनर्निर्मित करें। उदाहरण इनपुट: [6, 12, 10, 55, 45, 15] आउटपुट: इनऑर्डर ट्रैवर्सल: 6 10 12 15 45 55 एल्गोरिदम (स्टैक-आधारित) अंतिम तत्व रूट है स्टैक में रूट डालें दाएं से बाएं (n-2 से 0) ट्रैवर्स करें: नया नोड x बना

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

    मान लीजिए हमारे पास दो ट्रैवर्सल अनुक्रम प्रीऑर्डर और पोस्टऑर्डर हैं, हमें इन दो अनुक्रमों से बाइनरी ट्री उत्पन्न करना है। इसलिए यदि अनुक्रम [1,2,4,5,3,6,7], [4,5,2,6,7,3,1] हैं, तो आउटपुट होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - ans := pre[0] मान लेकर एक ट्री नोड बनाएं, stack := खा