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

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


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

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

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

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

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

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

उदाहरण

#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. C++ में बाइनरी ट्री नोड्स को वैलिडेट करना C++ में बाइनरी ट्री नोड्स को वैलिडेट करना

    मान लीजिए हमारे पास 0 से n-1 तक नंबरेड n बाइनरी ट्री नोड्स हैं जहां नोड i के दो चिल्ड्रन leftChild[i] और rightChild[i] हैं, हमें true कहना है यदि और केवल यदि सभी दिए गए नोड्स ठीक एक वैलिड बाइनरी ट्री बनाते हैं। जब नोड i का कोई लेफ्ट चाइल्ड नहीं होता तो leftChild[i] -1 के बराबर होगा, इसी तरह राइट चा

  1. C++ में ट्री नोड्स डिलीट करें C++ में ट्री नोड्स डिलीट करें

    मान लीजिए हमारे पास एक ट्री है, यह ट्री नोड 0 पर रूटेड है, यह निम्नानुसार दिया गया है -नोड्स की संख्या nodes हैi-वें नोड का मान value[i] हैi-वें नोड का पैरेंट parent[i] हैहमें हर उस सबट्री को हटाना है जिसके नोड्स के मानों का योग 0 है, ऐसा करने के बाद ट्री में शेष नोड्स की संख्या लौटाएं। यदि ट्री इस

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

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