কম্পিউটার টিউটোরিয়াল

C++-এ বাইনারি ট্রিতে দুটি নোড जोড়ে সর্বোচ্চ দৈর্ঘ্যের সাইকেল

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

উদাহরণ: ট্রি (চিত্রে) এর জন্য সর্বোচ্চ সাইকেল দৈর্ঘ্য ৬ (১-২-৩-৪-৭-৬ বা ১-৬-৭-৪-৩-২-১)।

ইনপুট

ট্রি (চিত্রে)

আউটপুট

Maximum length cycle is - 5

ব্যাখ্যা: বাম সাবট্রির ম্যাক্স হাইট ৩, ডান সাবট্রির ১। সাইকেল দৈর্ঘ্য = ৩+১+১=৫ (রুট যোগ করে)।

ইনপুট

ট্রি (চিত্রে)

আউটপুট

Maximum length cycle is - 7

ব্যাখ্যা: বাম ও ডান সাবট্রির ম্যাক্স হাইট ৩। সাইকেল দৈর্ঘ্য = ৩+৩+১=৭।

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

  • treenode ক্লাস: data, left, right পয়েন্টার।
  • newNode(int data) ফাংশন দিয়ে নোড তৈরি।
  • maxheight(treenode* root) ফাংশন রিকার্সিভলি ট্রির সর্বোচ্চ হাইট রিটার্ন করে।
  • রুট NULL হলে ০। লেফট ও রাইট হাইট রিকার্সিভ কল। max(lheight, rheight) + 1 রিটার্ন।
  • মেইনে রুটের বাম ও ডান সাবট্রির ম্যাক্স হাইট নিয়ে যোগ করা (+১ রুটের জন্য)।
  • ফলাফল প্রিন্ট।

উদাহরণ কোড

#include <bits/stdc++.h>
using namespace std;

class treenode{
public:
    int data;
    treenode* left;
    treenode* right;
};

int maxheight(treenode* root){
    if (root == NULL) return 0;
    int lheight = maxheight(root->left);
    int rheight = maxheight(root->right);
    return max(lheight, rheight) + 1;
}

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);
    cout << "Maximum length cycle: " << maxlheight + maxrheight + 1;
    return 0;
}

আউটপুট

Maximum length cycle: 6
  1. C++-এ বাইনারি ট্রির সব লিফ নোড বাম থেকে ডান ইটেরেটিভ পদ্ধতিতে প্রিন্ট করা

  2. C++-এ বাইনারি ট্রির সব লিফ নোড ডান থেকে বাম প্রিন্ট করা

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

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