কম্পিউটার

সর্বাধিক দৈর্ঘ্যের চক্র যা C++ এ একটি বাইনারি গাছের দুটি নোড যোগ করে তৈরি করা যেতে পারে


আমরা একটি বাইনারি গাছ দেওয়া হয়. লক্ষ্য হল প্রদত্ত গাছের সর্বাধিক দৈর্ঘ্য চক্র খুঁজে বের করা। আমরা রুটনোড থেকে বাম সাবট্রি এবং ডান সাবট্রির সর্বোচ্চ উচ্চতা খুঁজে বের করে এটি করব এবং দীর্ঘতম চক্র পেতে এই সর্বাধিক দৈর্ঘ্যের পাথগুলিতে যোগ দেব৷

সর্বাধিক দৈর্ঘ্যের চক্র যা C++ এ একটি বাইনারি গাছের দুটি নোড যোগ করে তৈরি করা যেতে পারে

উপরের গাছের জন্য সর্বাধিক দৈর্ঘ্য চক্র হল 1-2-3-4-7-6 বা 1-6-7-4-3-2-1। দৈর্ঘ্য 6.

ইনপুট - গাছ

সর্বাধিক দৈর্ঘ্যের চক্র যা C++ এ একটি বাইনারি গাছের দুটি নোড যোগ করে তৈরি করা যেতে পারে

আউটপুট − সর্বাধিক দৈর্ঘ্য চক্র হল −5

ব্যাখ্যা − বাম সাবট্রির সর্বোচ্চ উচ্চতা 3 এবং ডান সাবট্রির 1। চক্রের দৈর্ঘ্য 3+1+1=5 হয়ে যায়। সাইকেল হল 1-2-3-4-6 বা 1-6-4-3-2

ইনপুট - গাছ

সর্বাধিক দৈর্ঘ্যের চক্র যা C++ এ একটি বাইনারি গাছের দুটি নোড যোগ করে তৈরি করা যেতে পারে

আউটপুট − সর্বাধিক দৈর্ঘ্য চক্র হল −7

ব্যাখ্যা − বাম উপবৃক্ষের সর্বোচ্চ উচ্চতা 3 এবং ডান উপবৃক্ষের 3। চক্রের দৈর্ঘ্য 3+3+1=7 হয়। সাইকেল হল 5-4-2-1-8-7-6 বা 5-6-7-8-1-2-4-5

নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি

  • একটি ক্লাস ট্রিনোড তৈরি করুন যাতে পাবলিক ডেটা মেম্বার থাকে - নোডের ওজনের জন্য int ডেটা, বাম এবং ডান ট্রিনোড পয়েন্টারগুলি এই ধরনের অন্যান্য নোডগুলিতে নির্দেশ করতে৷

  • ফাংশন newNode(int data) একটি প্যারামিটার হিসাবে ডেটা নেয় এবং NULL হিসাবে বাম এবং ডান পয়েন্টার সহ একটি নোড তৈরি করে৷

  • newnode() ফাংশন কল করে একটি ট্রি তৈরি করুন।

  • ফাংশন maxheight(treenode* root) গাছের একটি শিকড় নেয় এবং মূলে থাকা গাছের সর্বোচ্চ উচ্চতা প্রদান করে।

  • এই ফাংশনটি চেক করে যে রুটটি NULL, মানে উচ্চতা 0, রিটার্ন 0।

  • lheight এবং rheight নোড রুটের বাম এবং ডান সাবট্রির উচ্চতা গণনা করে, সর্বোচ্চ উচ্চতায় (রুট->বাম) রিকার্সিভ কল করে। এবং সর্বোচ্চ উচ্চতা(রুট->ডান);

  • উচ্চতা এবং উচ্চতা তুলনা করে প্রাপ্ত সর্বোচ্চ মান ফেরত দিন।

  • মূলের ভিতরে আমরা ট্রিনোডের বাম সাবট্রি এবং ডান সাবট্রির সর্বোচ্চ উচ্চতার মান সঞ্চয় করি।

  • এখন সর্বাধিক দৈর্ঘ্য চক্র হল রুট নিজেই সহ maxlheight +maxrheight+1 উভয়ের সমষ্টি।

  • ফলে চক্রের দৈর্ঘ্য প্রিন্ট করুন।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
//class for tree
class treenode{
public:
   int data;
   treenode* left;
   treenode* right;
};
//find maximum height between left and right subtree of current root
int maxheight(treenode* root){
   if (root == NULL)
      return 0;
   else{
      int lheight = maxheight(root->left);
      int rheight = maxheight(root->right);
      //find maximum height
      if (lheight > rheight)
         return(lheight + 1);
      else
         return(rheight + 1);
      }
   }
   //creating a node of tree
   treenode* newNode(int data){
      treenode* Node = new treenode();
      Node->data = data;
      Node->left = NULL;
      Node->right = NULL;
      return(Node);
}
int main(){
   treenode *root = newNode(6);
   root->left = newNode(8);
   root->right = newNode(9);
   root->left->left = newNode(4);
   root->left->right = newNode(5);
   root->left->right->right = newNode(7);
   root->left->right->right->left = newNode(2);
   int maxlheight=maxheight(root->left);
   int maxrheight=maxheight(root->right);
   int maxlheight=maxDepth(root->left);
   int maxrheight=maxDepth(root->right);
   cout << "Maximum length cycle: " << maxlheight+maxrheight+1;
   return 0;
}

আউটপুট

Maximum length cycle: 6

  1. C++ এ পুনরাবৃত্তিমূলক পদ্ধতি ব্যবহার করে বাইনারি গাছের সমস্ত লিফ নোড বাম থেকে ডানে মুদ্রণ করুন

  2. C++ এ ডান থেকে বামে একটি বাইনারি গাছের সমস্ত পাতার নোড প্রিন্ট করুন

  3. C++ এ একটি বাইনারি ট্রির দুটি নোডের মধ্যে দূরত্ব খুঁজুন

  4. C++ এ একটি স্ট্যাক ব্যবহার করে বাইনারি ট্রিতে বাম থেকে ডানে লিফ নোড প্রিন্ট করুন