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

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

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

उदाहरण

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


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


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

तो समस्या का परिणाम होना चाहिए -

6 7 9 13 14
3 4
2
1

दृष्टिकोण

हमने एक तरीका अपनाया है जहां हम डीएफएस लागू कर रहे हैं।

अस्थायी मान लागू करने के लिए प्रत्येक मान को शून्य असाइन किया जाता है और फिर अधिकतम (दोनों बच्चे का मान) +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++ प्रोग्रामिंग में एक बाइनरी ट्री में सभी नोड्स के प्रिंट स्तर।

    बाइनरी ट्री को देखते हुए, कार्य 1 से n तक के नोड में संग्रहीत प्रत्येक कुंजी से जुड़े स्तर को प्रिंट करना है उपरोक्त पेड़ में, नोड्स हैं - 10 लेवल 13 पर और 211 लेवल 2140 पर, 162, 100 और 146 लेवल 3 पर कुंजी को देखते हुए प्रोग्राम को उस विशेष कुंजी के स्तर को प्रिंट करना होगा। उदाहरण एल्गोरिदम न

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

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

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

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