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

C++ प्रोग्राम: पुनरावृत्ति के बिना रूट-टू-लीफ पथ प्रिंट करना

इस ट्यूटोरियल में, हम दिए गए बाइनरी ट्री में रूट नोड से सभी पत्ती नोड्स तक के पथ को प्रिंट करने के प्रोग्राम पर चर्चा करेंगे।

उदाहरण के लिए, मान लें हमारे पास निम्नलिखित बाइनरी ट्री है:

C++ प्रोग्राम: पुनरावृत्ति के बिना रूट-टू-लीफ पथ प्रिंट करना

इस बाइनरी ट्री में, हमारे पास 4 पत्ती नोड्स हैं। इसलिए रूट नोड से पत्ती नोड तक हमारे पास 4 पथ हो सकते हैं।

इसे हल करने के लिए, हम पुनरावृत्त दृष्टिकोण (iterative approach) का उपयोग करेंगे। बाइनरी ट्री के प्रीऑर्डर ट्रैवर्सल करते समय हम पैरेंट पॉइंटर्स को मैप में स्टोर कर सकते हैं। जब भी ट्रैवर्सल के दौरान हम एक पत्ती नोड का सामना करते हैं, तो हम पैरेंट पॉइंटर्स का उपयोग करके रूट नोड से उसके पथ को आसानी से प्रिंट कर सकते हैं।

उदाहरण

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

struct Node {
    int data;
    struct Node *left, *right;
};

// नया नोड बनाने के लिए
Node* create_node(int data) {
    Node* node = new Node;
    node->data = data;
    node->left = node->right = NULL;
    return node;
}

// रूट से पत्ती तक का पथ प्रिंट करना
void print_cpath(Node* curr, map parent) {
    stack nodes_stack;
    while (curr) {
        nodes_stack.push(curr);
        curr = parent[curr];
    }
    while (!nodes_stack.empty()) {
        curr = nodes_stack.top();
        nodes_stack.pop();
        cout << curr->data << " ";
    }
    cout << endl;
}

// प्रीऑर्डर ट्रैवर्सल करना
void preorder_traversal(Node* root) {
    if (root == NULL)
        return;
    stack nodeStack;
    nodeStack.push(root);
    map parent;
    parent[root] = NULL;
    while (!nodeStack.empty()) {
        Node* current = nodeStack.top();
        nodeStack.pop();
        if (!(current->left) && !(current->right))
            print_cpath(current, parent);
        if (current->right) {
            parent[current->right] = current;
            nodeStack.push(current->right);
        }
        if (current->left) {
            parent[current->left] = current;
            nodeStack.push(current->left);
        }
    }
}

int main() {
    Node* root = create_node(101);
    root->left = create_node(82);
    root->right = create_node(23);
    root->left->left = create_node(34);
    root->left->right = create_node(55);
    root->right->left = create_node(29);
    preorder_traversal(root);
    return 0;
}

आउटपुट

101 82 34
101 82 55
101 23 29
  1. C++ में सापेक्ष स्थितियों के साथ रूट से लीफ तक के सभी पथ प्रिंट करें C++ में सापेक्ष स्थितियों के साथ रूट से लीफ तक के सभी पथ प्रिंट करें

    इस समस्या में, हमें एक बाइनरी ट्री दिया गया है। और हमें ट्री के रूट से लीफ तक के सभी पथों को प्रिंट करना है। साथ ही, नोड्स की सापेक्ष स्थितियों को दिखाने के लिए अंडरस्कोर _ जोड़ना है। विषय को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं - इनपुट - आउटपुट - _ _ 3 _ 9 1 _3 9 _7 3 _ 4 _ _ 2 3 9 4 1 7 6

  1. C++ प्रोग्राम: पुनरावृत्ति के बिना रूट-टू-लीफ पथ प्रिंट करना C++ प्रोग्राम: पुनरावृत्ति के बिना रूट-टू-लीफ पथ प्रिंट करना

    इस ट्यूटोरियल में, हम दिए गए बाइनरी ट्री में रूट नोड से सभी पत्ती नोड्स तक के पथ को प्रिंट करने के प्रोग्राम पर चर्चा करेंगे। उदाहरण के लिए, मान लें हमारे पास निम्नलिखित बाइनरी ट्री है: इस बाइनरी ट्री में, हमारे पास 4 पत्ती नोड्स हैं। इसलिए रूट नोड से पत्ती नोड तक हमारे पास 4 पथ हो सकते हैं। इसे

  1. C++ प्रोग्राम: रिकर्सन के बिना रूट-टू-लीफ पथ प्रिंट करना C++ प्रोग्राम: रिकर्सन के बिना रूट-टू-लीफ पथ प्रिंट करना

    दिए गए बाइनरी ट्री में प्रोग्राम को रूट से लीफ तक के कई पथ ढूंढने होंगे जिसका अर्थ है सभी पथ प्रिंट होने चाहिए लेकिन चुनौती यह है कि रिकर्सन के बिना करना है। हम ट्री को पुनरावृत्त रूप से ट्रैवर्स करेंगे क्योंकि बाधा यह है कि इसे रिकर्सन के बिना करना है। इसलिए इसे प्राप्त करने के लिए हम एक STL मैप का