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

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


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

उदाहरण

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


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


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

तो समस्या का आउटपुट होना चाहिए -

6 7 9 13 14 3 4 2 1

दृष्टिकोण

हमने एक ऐसा दृष्टिकोण अपनाया है जहां हम DFS लागू कर रहे हैं।

एक अस्थायी मान शून्य को हर मान को सौंपा जाता है और फिर सभी नोड्स को मान maximum(value of both child)+1 असाइन किया जाता है।

एल्गोरिदम

START STEP 1-> DEFINE A struct Node    WITH DATA MEMBERS data, order, *left, *right STEP 2-> DEFINE A struct Node* newNode(int data, int order)    WITH struct Node* node = new Node, node->data = data, node->order = order,    node->left = NULL, node->right = NULL, return (node) FUNCTION void postod(struct Node* node, vector<pair<int, int> >& v) STEP 1-> IF node == NULL THEN,    RETURN STEP 2-> CALL FUNCTION postod(node->left, v) STEP 3-> CALL FUNCTION postod(node->right, v) STEP 4-> IF node->right == NULL && node->left == NULL THEN,    SET node->order AS 1    v.push_back(make_pair(node->order, node->data))    ELSE       node->order = max((node->left)->order, (node->right)->order) + 1    v.push_back(make_pair(node->order, node->data)) END IF FUNCTION void printLeafNodes(int n, vector<pair<int, int> >& v) STEP 1-> sort(v.begin(), v.end()) STEP 2-> LOOP FOR i = 0 AND i < n AND i++    IF v[i].first == v[i + 1].first THEN,       PRINT v[i].second    ELSE       PRINT v[i].second    END IF END FOR IN main() STEP 1-> CREATE A ROOT NODE LIKE struct Node* root = newNode(8, 0) STEP 2-> DECLARE AND SET n = 9 STEP 3-> CALL postod(root, v); STEP 4-> CALL printLeafNodes(n, v);

उदाहरण

#include <bits/stdc++.h> using namespace std; struct Node {    int data;    int order;    struct Node* left;    struct Node* right; }; struct Node* newNode(int data, int order){    struct Node* node = new Node;    node->data = data;    node->order = order;    node->left = NULL;    node->right = NULL;    return (node); } void postod(struct Node* node, vector<pair<int, int> >& v){    if (node == NULL)       return;       /* first recur on left child */    postod(node->left, v);    /* now recur on right child */    postod(node->right, v);    // If current node is leaf node, it's order will be 1    if (node->right == NULL && node->left == NULL) {       node->order = 1;       // make pair of assigned value and tree value       v.push_back(make_pair(node->order, node->data));    } else {       node->order = max((node->left)->order, (node->right)->order) + 1;       v.push_back(make_pair(node->order, node->data));    } } void printLeafNodes(int n, vector<pair<int, int> >& v){    sort(v.begin(), v.end());    for (int i = 0; i < n; i++) {       if (v[i].first == v[i + 1].first)          cout << v[i].second << " ";       else          cout << v[i].second << "\n";    } } int main(){    struct Node* root = newNode(1, 0);    root->left = newNode(2, 0);    root->right = newNode(3, 0);    root->left->left = newNode(4, 0);    root->left->right = newNode(6, 0);    root->right->left = newNode(14, 0);    root->right->right = newNode(9, 0);    root->left->left->left = newNode(7, 0);    root->left->left->right = newNode(13, 0);    int n = 9;    vector<pair<int, int> > v;    postod(root, v);    printLeafNodes(n, v);    return 0; }

आउटपुट

यह प्रोग्राम आउटपुट प्रिंट करेगा -

6 7 9 13 14 3 4 2 1

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

    दिए गए बाइनरी ट्री में, कार्य 1 से n तक शुरू होने वाले प्रत्येक कुंजी से जुड़े लेवल को प्रिंट करना है जो एक नोड में संग्रहीत है। उपरोक्त ट्री में नोड्स हैं - 10 at level 1 3 and 211 at level 2 140, 162, 100 and 146 at level 3 दिए गए कुंजी के लिए प्रोग्राम को उस विशेष कुंजी का लेवल प्रिंट करना होगा।

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

    दिए गए बाइनरी ट्री में, फ़ंक्शन नोड्स में संग्रहीत कुंजियों के बाइनरी मान उत्पन्न करेगा और फिर उस बाइनरी समतुल्य में सेट बिट्स (1) की संख्या लौटाएगा। उदाहरण बाइनरी ट्री जिसमें कुंजियां हैं: 10 3 211 140 162 100 और 146 कुंजी बाइनरी समतुल्य सेट बिट्स (आउटपुट) 10 1010 2 3 0011 2 211 1101001

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

    प्रोग्राम को बाइनरी ट्री के लीफ नोड्स को बाएं से दाएं प्रिंट करना चाहिए लेकिन चुनौती केवल एक स्टैक का उपयोग करना है। push() फ़ंक्शन के माध्यम से बाइनरी ट्री के नोड्स डालें और pop() ऑपरेशन के माध्यम से लीफ नोड्स प्रदर्शित करें। लीफ नोड्स अंतिम नोड्स हैं जिनका बाएं और दाएं पॉइंटर NULL होता है जिसका अर