কম্পিউটার

C++ এ ন্যূনতম যোগফল আছে এমন ট্রি লেভেল খুঁজে বের করার প্রোগ্রাম


ধরুন আমাদের একটি বাইনারি গাছ আছে, তার মূলের স্তর হল 1, এর সন্তানদের স্তর হল 2, এবং আরও অনেক কিছু৷ আমাদেরকে সবচেয়ে ছোট স্তর X খুঁজে বের করতে হবে যাতে X স্তরে নোডের সমস্ত মানের সমষ্টি ন্যূনতম হয়৷ তাই গাছটি যদি −

এর মত হয়

C++ এ ন্যূনতম যোগফল আছে এমন ট্রি লেভেল খুঁজে বের করার প্রোগ্রাম

আউটপুট 2 হবে কারণ যোগফল 4 – 10 =-6, যা সর্বনিম্ন।

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

  • স্তর :=1, যোগফল :=r এর মান, ansLevel :=স্তর, ansSum :=যোগফল

  • একটি সারি q সংজ্ঞায়িত করুন, q

    -এ প্রদত্ত নোড r সন্নিবেশ করুন
  • যখন q খালি নয়

    • ক্ষমতা:=q এর আকার

    • 1 দ্বারা স্তর বাড়ান, যোগফল :=0

    • যখন ক্ষমতা 0

      নয়
      • নোড :=q থেকে সামনের নোড, q থেকে নোড মুছে দিন

      • যদি নোডের ডানটি বৈধ হয়, তাহলে sum :=sum + ডান নোডের মান, ডান সন্নিবেশ করুন

      • q এ নোড করুন
      • যদি নোডের বাম অংশটি বৈধ হয়, তাহলে sum :=sum + বাম নোডের মান, q তে লেফটনোড ঢোকান

      • 1 দ্বারা ক্ষমতা হ্রাস করুন

    • যদি ansSum

  • ফেরত আনলেভেল

আসুন আরও ভাল বোঝার জন্য নিম্নলিখিত বাস্তবায়ন দেখি—

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
class TreeNode{
   public:
      int val;
      TreeNode *left, *right;
      TreeNode(int data){
         val = data;
         left = NULL;
      right = NULL;
      }
};
class Solution {
   public:
   int solve(TreeNode* r) {
      int level = 1, sum = r->val;
      int ansLevel = level, ansSum = sum;
      queue <TreeNode*> q;
      q.push(r);
      while(!q.empty()){
         int capacity = q.size();
         level++;
         sum = 0;
         while(capacity--){
            TreeNode* node = q.front();
            q.pop();
            if(node->right){
               sum += node->right->val;
               q.push(node->right);
            }
            if(node->left){
               sum += node->left->val;
               q.push(node->left);
            }
         }
         if(ansSum>sum){
            ansSum = sum;
            ansLevel = level;
         }
      }
      return ansLevel;
   }
};
main(){
   TreeNode *root = new TreeNode(5);
   root->left = new TreeNode(4);
   root->right = new TreeNode(-10);
   root->left->right = new TreeNode(-2);
   root->right->left = new TreeNode(-7);
   root->right->right = new TreeNode(15);
   Solution ob;
   cout <<ob.solve(root);
}

ইনপুট

TreeNode *root = new TreeNode(5);
root->left = new TreeNode(4);
root->right = new TreeNode(-10);
root->left->right = new TreeNode(-2);
root->right->left = new TreeNode(-7);
root->right->right = new TreeNode(15);

আউটপুট

2

  1. C++ এ বাইনারি ট্রিতে সর্বোচ্চ স্তরের যোগফল খুঁজুন

  2. C++ এ বাইনারি ট্রিতে সর্বাধিক (বা সর্বনিম্ন) খুঁজুন

  3. C++ এ একটি গাছের মধ্যে সবচেয়ে বড় সাবট্রি সমষ্টি খুঁজুন

  4. C++ এ বাইনারি গাছের ডান পাতার যোগফল খুঁজে বের করার প্রোগ্রাম