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

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


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

हम ट्री को पुनरावृत्त रूप से ट्रैवर्स करेंगे क्योंकि बाधा यह है कि इसे रिकर्सन के बिना करना है। इसलिए इसे प्राप्त करने के लिए हम एक STL मैप का उपयोग कर सकते हैं जो रूट तत्व को संग्रहीत करेगा और जब भी लेवल ऑर्डर ट्रैवर्सल के माध्यम से लीफ नोड की पहचान की जाती है तो यह रूट से लीफ तक का पथ प्रिंट करेगा क्योंकि एक मैप पॉइंटर है जो रूट नोड की ओर इशारा कर रहा है।

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

उपरोक्त ट्री में, रूट से लीफ तक पहुंचने के लिए कई पथ उत्पन्न किए जा सकते हैं -

10 -> 3 -> 140 10 -> 3 -> 162 10 -> 211 -> 100 10 -> 211 -> 146

इसलिए, प्रोग्राम को दिए गए बाइनरी ट्री के आउटपुट के रूप में सभी दिए गए पथ प्रिंट करने होंगे।

एल्गोरिदम

START Step 1 -> create a structure of a node as    struct Node       struct node *left, *right       int data    End Step 2 -> function to create a node    node* newnode(int data)    node->data = data    node->left = node->right = NULL;    return (node) Step 3 -> create function to calculate the path    void calculatePath(Node* curr, map<Node*, Node*> first)    create STL stack<Node*> stk    Loop While (curr)       stk.push(curr)       curr = first[curr]    End    Loop While !stk.empty()       curr = stk.top()       stk.pop()       print curr->data    End Step 4 -> create function to find the leaf nodes    void leaf(Node* root)    IF root = NULL       Return    End    Create STL stack<Node*> stc    stc.push(root)    Create STL map<Node*, Node*> prnt    prnt[root] = NULL    Loop while !stc.empty()       Node* curr = stc.top()       stc.pop()       IF!(curr->left) && !(curr->right)          calculatePath(curr, prnt)       End       IF curr->right          prnt[curr->right] = curr          stc.push(curr->right)       End       IF curr->left          prnt[curr->left] = curr          stc.push(curr->left)       End    End STOP

उदाहरण

#include <bits/stdc++.h> using namespace std; //structure of a node struct Node{    int data;    struct Node *left, *right; }; //function to create a new node Node* newNode(int data){    Node* node = new Node;    node->data = data;    node->left = node->right = NULL;    return node; } //this function will calculate the path void calculatePath(Node* curr, map<Node*, Node*> first){    stack<Node*> stk;    while (curr){       stk.push(curr);       curr = first[curr];    }    while (!stk.empty()){       curr = stk.top();       stk.pop();       cout << curr->data << " ";    }    cout << endl; } //this function will lead to the leafs void leaf(Node* root){    if (root == NULL)       return;    stack<Node*> stc;    stc.push(root);    map<Node*, Node*> prnt;    prnt[root] = NULL;    while (!stc.empty()){       Node* curr = stc.top();       stc.pop();       if (!(curr->left) && !(curr->right))          calculatePath(curr, prnt);       if (curr->right){          prnt[curr->right] = curr;          stc.push(curr->right);       }       if (curr->left){          prnt[curr->left] = curr;          stc.push(curr->left);       }    } } int main(){    Node* root = newNode(67); //it will insert the nodes to create a tree    root->left = newNode(34);    root->right = newNode(89);    root->left->left = newNode(23);    root->left->right = newNode(95);    root->right->left = newNode(12);    leaf(root); //call the function leaf    return 0; }

आउटपुट

यदि हम उपरोक्त प्रोग्राम चलाते हैं तो यह निम्नलिखित आउटपुट उत्पन्न करेगा

67 34 23 67 34 95 67 89 12

  1. C++ में पुनरावृत्ति का उपयोग करके लिंक्ड लिस्ट के वैकल्पिक नोड्स प्रिंट करें C++ में पुनरावृत्ति का उपयोग करके लिंक्ड लिस्ट के वैकल्पिक नोड्स प्रिंट करें

    लिंक्ड लिस्ट एक रैखिक डेटा संरचना है जो तत्वों को गैर-सन्निहित मेमोरी स्थानों में संग्रहीत करती है। प्रत्येक तत्व में लिंक्ड लिस्ट के अगले तत्व का एक पॉइंटर होता है। उदाहरण - इस समस्या में, हमें एक लिंक्ड लिस्ट दी गई है और हमें इस लिंक्ड लिस्ट के तत्वों को प्रिंट करना है लेकिन केवल वैकल्पिक तत्वों

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

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

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

    दिए गए बाइनरी ट्री में प्रोग्राम को दिए गए कई पथों में से रूट से लीफ तक का सबसे छोटा पथ ढूंढना होगा। चूंकि हम ट्री को बाएं से दाएं ट्रैवर्स करते हैं, इसलिए यदि रूट से लीफ तक कई सबसे छोटे पथ हैं तो प्रोग्राम ट्री के बाएं तरफ पहले ट्रैवर्स किए गए सबसे छोटे पथ को प्रिंट करेगा। हम एक कतार (queue) का उपय