কম্পিউটার

একটি নির্বিচারে বাইনারি ট্রিকে একটি গাছে রূপান্তর করুন যা C++ এ চিলড্রেন সাম প্রপার্টি ধারণ করে


এই টিউটোরিয়ালে, আমরা একটি স্বেচ্ছাচারী বাইনারি ট্রিকে একটি গাছে রূপান্তর করার একটি প্রোগ্রাম নিয়ে আলোচনা করব যা শিশুদের সমষ্টির সম্পত্তি ধারণ করে৷

এর জন্য আমাদের একটি বাইনারি গাছ দেওয়া হবে। আমাদের কাজ হল এটিকে বাইনারি ট্রিতে রূপান্তর করা যা শিশুদের সমষ্টি সম্পত্তি অনুসরণ করে। কিন্তু সীমাবদ্ধতা হল আমরা শুধুমাত্র নোডগুলিতে উপস্থিত মানগুলিকে বৃদ্ধি করতে পারি, গাছের গঠন পরিবর্তন করতে বা নোডে মানগুলি হ্রাস করতে পারি না৷

উদাহরণ

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
//node structure for binary tree
class node{
   public:
   int data;
   node* left;
   node* right;
   //creation of new node
   node(int data){
      this->data = data;
      this->left = NULL;
      this->right = NULL;
   }
};
//incrementing left subtree
void increment(node* node, int diff);
//main function converting the tree
void convert_Btree(node* node){
   int left_data = 0, right_data = 0, diff;
   //returning true in case of root
   //or leaf node
   if (node == NULL || (node->left == NULL &&
   node->right == NULL))
   return;
   else {
      //converting left and right subtrees
      convert_Btree(node->left);
      convert_Btree(node->right);
      if (node->left != NULL)
         left_data = node->left->data;
      if (node->right != NULL)
         right_data = node->right->data;
      //getting children sum
      diff = left_data + right_data - node->data;
      //if children sum is greater than node data
      if (diff > 0)
         node->data = node->data + diff;
      if (diff > 0)
         increment(node, -diff);
   }
}
//incrementing the node value
void increment(node* node, int diff){
   if(node->left != NULL) {
      node->left->data = node->left->data + diff;
      //moving recursively in the tree
      increment(node->left, diff);
   }
   else if (node->right != NULL) {
      node->right->data = node->right->data + diff;
      increment(node->right, diff);
   }
}
//printing inorder traversal
void printInorder(node* node){
   if (node == NULL)
      return;
   printInorder(node->left);
   cout<<node->data<<" ";
   printInorder(node->right);
}
int main(){
   node *root = new node(50);
   root->left = new node(7);
   root->right = new node(2);
   root->left->left = new node(3);
   root->left->right = new node(5);
   root->right->left = new node(1);
   root->right->right = new node(30);
   cout << "Before conversion: " << endl;
   printInorder(root);
   convert_Btree(root);
   cout << "\nAfter conversion: " << endl;
   printInorder(root);
   return 0;
}

আউটপুট

Before conversion:
3 7 5 50 1 2 30
After conversion:
14 19 5 50 1 31 30

  1. C++ এ বাইনারি ট্রিতে সর্বাধিক সর্পিল যোগফল

  2. C++ এ একটি বাইনারি ট্রিতে সর্বাধিক পথের যোগফল

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

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