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

C++ प्रोग्राम: बाइनरी ट्री में लीफ नोड्स को बाएं से दाएं एक स्टैक का उपयोग करके प्रिंट करना


प्रोग्राम को बाइनरी ट्री के लीफ नोड्स को बाएं से दाएं प्रिंट करना चाहिए लेकिन चुनौती केवल एक स्टैक का उपयोग करना है।

push() फ़ंक्शन के माध्यम से बाइनरी ट्री के नोड्स डालें और pop() ऑपरेशन के माध्यम से लीफ नोड्स प्रदर्शित करें।

लीफ नोड्स अंतिम नोड्स हैं जिनका बाएं और दाएं पॉइंटर NULL होता है जिसका अर्थ है कि वह विशेष नोड पैरेंट नोड नहीं है।

उदाहरण

Input : 12 21 32 41 59 33 70 Output : 41 59 33 70

C++ प्रोग्राम: बाइनरी ट्री में लीफ नोड्स को बाएं से दाएं एक स्टैक का उपयोग करके प्रिंट करना

स्टैक एक डेटा संरचना है जो LIFO संरचना है जिसमें टॉप पॉइंटर अंतिम डाले गए तत्वों को इंगित करेगा इसलिए लीफ नोड्स स्टैक में अंत में डाले जाएंगे और स्टैक संरचना के अनुसार किसी भी अन्य नोड से पहले स्टैक से पॉप आउट या हटा दिए जाएंगे।

नीचे दिया गया कोड दिए गए एल्गोरिदम का STL का उपयोग करके C++ कार्यान्वयन दिखाता है।

एल्गोरिदम

START    Step 1 -> create node variable of type structure       Declare int data       Declare pointer of type node using *left, *right    Step 2 -> create function for inserting node with parameter as val       Declare node variable of node using malloc       Set node->data = val       Set node->left = node->right = NULL       return node    step 3 -> Declare Function void leaf(Node *ptr)       create vector stack<Node*>stck       Loop While 1       IF ptr          Stck.push(ptr)          Ptr = ptr->left       Else          IF (stck.empty())             Break          Else             IF (stck.top()->right == NULL)                Set ptr = stck.top()                Set stck.pop()                IF ptr->left = NULL                   Print ptr->data             End             Loop While ptr == stck.top()->right                Set ptr = stck.top()                Call stck.pop()                IF stck.empty()                   Break                End             IF !stck.empty()                   Set ptr = tck.top()->right                Else                   Set ptr = NULL                EndIF             End          End       End    Step 4-> In main()       Call New passing value user want to insert as Node* root = New(12)       Call leaf(root) STOP

उदाहरण

#include <bits/stdc++.h> using namespace std; // Structure of a node struct Node {    Node* left;    Node* right;    int data; }; //Function to create a new node Node* New(int val) {    Node* node = new Node();    node->left = node->right = NULL;    node->data = val;    return node; } // leaf node using stack void leaf(Node* ptr) {    // stack that will store nodes    stack<Node*> stck;    while (1) {       if (ptr) {          stck.push(ptr);          ptr = ptr->left;       } else {          if (stck.empty())             break;          else {             if (stck.top()->right == NULL) {                ptr = stck.top();                stck.pop();                // Print the leaf node                if (ptr->left == NULL)                   printf("%d ", ptr->data);             }             while (ptr == stck.top()->right) {                ptr = stck.top();                stck.pop();                if (stck.empty())                   break;             }             if (!stck.empty())                ptr = stck.top()->right;             else                ptr = NULL;          }       }    } } int main() {    printf("leaf nodes at end level are : ");    Node* root = New(12);    root->left = New(21);    root->right = New(32);    root->left->left = New(41);    root->left->right = New(59);    root->right->left = New(33);    root->right->right = New(70);    leaf(root);    return 0; }

आउटपुट

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

leaf nodes at end level are : 41 59 33 70

  1. C++ में लीफ नोड से दूरी K पर सभी नोड्स प्रिंट करना C++ में लीफ नोड से दूरी K पर सभी नोड्स प्रिंट करना

    इस समस्या में, हमें एक बाइनरी ट्री और एक संख्या K दी गई है। हमें ट्री के उन सभी नोड्स को प्रिंट करना है जो लीफ नोड से k दूरी पर हैं। बाइनरी ट्री बाइनरी ट्री एक विशेष ट्री है जिसके प्रत्येक नोड में अधिकतम दो नोड्स होते हैं (एक/दो/कोई नहीं)। लीफ नोड बाइनरी ट्री का लीफ नोड ट्री के अंत में स्थित नोड

  1. C++ प्रोग्राम: बाइनरी ट्री के विषम स्तरों पर नोड्स प्रिंट करना C++ प्रोग्राम: बाइनरी ट्री के विषम स्तरों पर नोड्स प्रिंट करना

    इस ट्यूटोरियल में, हम एक दिए गए बाइनरी ट्री के विषम स्तरों पर मौजूद नोड्स को प्रिंट करने के प्रोग्राम पर चर्चा करेंगे। इस प्रोग्राम में, रूट नोड के लिए स्तर 1 माना जाता है और साथ ही वैकल्पिक स्तर अगला विषम स्तर होता है। उदाहरण के लिए, मान लें हमें निम्नलिखित बाइनरी ट्री दिया गया है: तो इस बाइनरी

  1. C++ प्रोग्राम: बाइनरी ट्री के नोड्स को प्रिंट करना जैसे ही वे लीफ नोड बनते हैं C++ प्रोग्राम: बाइनरी ट्री के नोड्स को प्रिंट करना जैसे ही वे लीफ नोड बनते हैं

    एक बाइनरी ट्री दिया गया है, हमें उसके लीफ नोड्स को प्रिंट करना है और फिर उन लीफ नोड्स को हटाना है और फिर तब तक दोहराना है जब तक ट्री में कोई नोड न बचे। उदाहरण तो समस्या का आउटपुट होना चाहिए - 6 7 9 13 14 3 4 2 1 दृष्टिकोण हमने एक ऐसा दृष्टिकोण अपनाया है जहां हम DFS लागू कर रहे हैं। एक अस्थायी म