কম্পিউটার

C++ এ সম্পূর্ণ ট্রি নোড গণনা করুন


ধরুন আমাদের একটি সম্পূর্ণ বাইনারি গাছ আছে, আমাদের নোডের সংখ্যা গণনা করতে হবে। তাই গাছটি যদি −

এর মত হয়

C++ এ সম্পূর্ণ ট্রি নোড গণনা করুন

সুতরাং আউটপুট হবে 6.

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব

  • এটি পুনরাবৃত্তিমূলক পদ্ধতি ব্যবহার করবে। এই পদ্ধতি, countNodes() রুটকে আর্গুমেন্ট হিসেবে নিচ্ছে।
  • hr :=0 এবং hl :=0
  • মূল হিসাবে l এবং r দুটি নোড তৈরি করুন
  • যখন l খালি নেই
    • 1 দ্বারা hl বাড়ান
    • 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. C++ এ সার্কুলার লিঙ্ক তালিকায় নোড গণনা করুন

  2. C++ এ বাইনারি ট্রি নোড যাচাই করুন

  3. C++ এ ট্রি নোড মুছুন

  4. C++ এ একটি বাইনারি ট্রিতে সমস্ত পূর্ণ নোড প্রিন্ট করুন