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

C++ में पूर्ण ट्री नोड्स की गणना करें

मान लीजिए कि हमारे पास एक पूर्ण बाइनरी ट्री है, हमें नोड्स की संख्या गिननी है। तो अगर पेड़ जैसा है -

C++ में पूर्ण ट्री नोड्स की गणना करें

तो आउटपुट 6 होगा।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे

  • यह पुनरावर्ती दृष्टिकोण का उपयोग करेगा। यह विधि, countNodes() जड़ को तर्क के रूप में ले रही है।
  • घंटा:=0 और एचएल:=0
  • रूट के रूप में दो नोड l और r बनाएं
  • जबकि l खाली नहीं है
    • hl 1 से बढ़ाएं
    • l :=l के बाएँ
  • जबकि r खाली नहीं है
    • r :=r के दाएं
    • घंटे में 1 की वृद्धि करें
  • अगर hl =hr, तो रिटर्न (2 ^ hl) - 1
  • रिटर्न 1 + काउंटनोड्स (रूट के बाएँ) + काउंटनोड्स (रूट के दाएँ)

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class TreeNode{
   public:
      int val;
      TreeNode *left, *right;
      TreeNode(int data){
         val = data;
         left = right = NULL;
      }
};
void insert(TreeNode **root, int val){
   queue<TreeNode*> q;
   q.push(*root);
   while(q.size()){
      TreeNode *temp = q.front();
      q.pop();
      if(!temp->left){
         if(val != NULL)
            temp->left = new TreeNode(val);
         else
            temp->left = new TreeNode(0);
         return;
      }else{
         q.push(temp->left);
      }
      if(!temp->right){
         if(val != NULL)
         temp->right = new TreeNode(val);
      else
         temp->right = new TreeNode(0);
         return;
      } else {
         q.push(temp->right);
      }
   }
}
TreeNode *make_tree(vector<int> v){
   TreeNode *root = new TreeNode(v[0]);
   for(int i = 1; i<v.size(); i++){
      insert(&root, v[i]);
   }
   return root;
}
class Solution {
   public:
   int fastPow(int base, int power){
      int res = 1;
      while(power > 0){
         if(power & 1) res *= base;
         base *= base;
         power >>= 1;
      }
      return res;
   }
   int countNodes(TreeNode* root) {
      int hr = 0;
      int hl = 0;
      TreeNode* l = root;
      TreeNode* r = root;
      while(l){
         hl++;
         l = l->left;
      }
      while(r){
         r = r->right;
         hr++;
      }
      if(hl == hr) return fastPow(2, hl) - 1;
      return 1 + countNodes(root->left) + countNodes(root->right);
   }
};
main(){
   Solution ob;
   vector<int> v = {1,2,3,4,5,6,7,8,9,10};
   TreeNode *node = make_tree(v);
   cout << (ob.countNodes(node));
}

इनपुट

[1,2,3,4,5,6,7,8,9,10]

आउटपुट

10

  1. सी ++ में बाइनरी ट्री नोड्स को मान्य करें

    मान लीजिए कि हमारे पास n बाइनरी ट्री नोड्स हैं जिनकी संख्या 0 से n-1 तक है, जहां नोड I के दो बच्चे हैं। सभी दिए गए नोड्स बिल्कुल एक वैध बाइनरी ट्री बनाते हैं। जब नोड मेरे पास कोई बायां बच्चा नहीं है तो बाएं बच्चे [i] बराबर -1 होगा, इसी तरह दाएं बच्चे के लिए। हमें यह ध्यान रखना होगा कि नोड्स का कोई म

  1. C++ में ट्री नोड्स हटाएं

    मान लीजिए कि हमारे पास एक पेड़ है, इस पेड़ की जड़ें नोड 0 पर हैं, यह इस प्रकार दिया गया है - नोड्स की संख्या नोड्स है ith नोड का मान मान है[i] ith नोड का जनक माता-पिता है[i] हमें प्रत्येक सबट्री को हटाना होगा जिसका नोड्स के मानों का योग 0 है, ऐसा करने के बाद पेड़ में शेष नोड्स की संख्या वापस कर द

  1. C++ में एक बाइनरी ट्री में सभी पूर्ण नोड्स प्रिंट करें

    इस समस्या में हमें एक बाइनरी ट्री दिया जाता है। हमारा काम पेड़ के सभी नोड्स को प्रिंट करना है जो पूर्ण नोड्स हैं। बाइनरी ट्री एक पेड़ है जिसमें एक नोड में अधिकतम 2 चाइल्ड नोड हो सकते हैं। नोड या वर्टेक्स में कोई नोड नहीं हो सकता है, एक बच्चा या दो चाइल्ड नोड हो सकते हैं। उदाहरण - एक पूर्ण नोड