কম্পিউটার

C++ ব্যবহার করে বাইনারি গাছে পাতা থেকে পাতার দীর্ঘতম পথ প্রিন্ট করার জন্য প্রোগ্রাম


এই টিউটোরিয়ালে, আমরা একটি প্রদত্ত বাইনারি গাছের একটি লিফ নোড থেকে অন্য লিফ নোডে বিদ্যমান দীর্ঘতম পথটি প্রিন্ট করার জন্য একটি প্রোগ্রাম নিয়ে আলোচনা করব৷

অন্য কথায়, বাইনারি ট্রির ব্যাসে প্রদর্শিত সমস্ত নোডগুলি আমাদের প্রিন্ট করতে হবে। এখানে, একটি নির্দিষ্ট বাইনারি গাছের ব্যাস (বা প্রস্থ) এক প্রান্তের নোড থেকে অন্য প্রান্তে দীর্ঘতম পথে নোডের সংখ্যা হিসাবে সংজ্ঞায়িত করা হয়৷

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

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   Node *left, *right;
};
struct Node* create_node(int data){
   struct Node* node = new Node;
   node->data = data;
   node->left = node->right = NULL;
   return (node);
}
int tree_height(Node* root, int& ans, Node*(&k), int& lh, int& rh, int& f){
   if (root == NULL)
      return 0;
   int left_tree_height = tree_height(root->left, ans, k, lh, rh, f);
   int right_tree_height = tree_height(root->right, ans, k, lh, rh, f);
   if (ans < 1 + left_tree_height + right_tree_height){
      ans = 1 + left_tree_height + right_tree_height;
      k = root;
      lh = left_tree_height;
      rh = right_tree_height;
   }
   return 1 + max(left_tree_height, right_tree_height);
}
void print_roottonode(int ints[], int len, int f){
   int i;
   if (f == 0){
      for (i = len - 1; i >= 0; i--) {
         printf("%d ", ints[i]);
      }
   }
   else if (f == 1) {
      for (i = 0; i < len; i++) {
         printf("%d ", ints[i]);
      }
   }
}
void print_pathr(Node* node, int path[], int pathLen, int max, int& f){
   if (node == NULL)
   return;
   path[pathLen] = node->data;
   pathLen++;
   if (node->left == NULL && node->right == NULL) {
      if (pathLen == max && (f == 0 || f == 1)) {
         print_roottonode(path, pathLen, f);
         f = 2;
      }
   }
   else {
      print_pathr(node->left, path, pathLen, max, f);
      print_pathr(node->right, path, pathLen, max, f);
   }
}
void calc_diameter(Node* root){
   if (root == NULL)
      return;
   int ans = INT_MIN, lh = 0, rh = 0;
   int f = 0;
   Node* k;
   int tree_height_of_tree = tree_height(root, ans, k, lh, rh, f);
   int lPath[100], pathlen = 0;
   print_pathr(k->left, lPath, pathlen, lh, f);
   printf("%d ", k->data);
   int rPath[100];
   f = 1;
   print_pathr(k->right, rPath, pathlen, rh, f);
}
int main(){
   struct Node* root = create_node(12);
   root->left = create_node(22);
   root->right = create_node(33);
   root->left->left = create_node(45);
   root->left->right = create_node(57);
   root->left->right->left = create_node(26);
   root->left->right->right = create_node(76);
   root->left->left->right = create_node(84);
   root->left->left->right->left = create_node(97);
   calc_diameter(root);
   return 0;
}

আউটপুট

97 84 45 22 57 26

  1. C++ ব্যবহার করে একটি গাছের বিজোড় স্তরে নোডগুলি প্রিন্ট করার জন্য প্রোগ্রাম

  2. বাইনারি গাছের নোডগুলি প্রিন্ট করুন যেহেতু তারা C++ প্রোগ্রামিং-এ লিফ নোড হয়ে যায়।

  3. C++ প্রোগ্রামিং-এ বাইনারি ট্রিতে যেকোনো দুটি নোডের মধ্যে প্রিন্ট পাথ।

  4. C++ প্রোগ্রামিং-এ বাইনারি ট্রি-তে প্রথম সংক্ষিপ্ত রুট টু লিফ পাথ প্রিন্ট করুন।