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

দুই বাইনারি ট্রি মার্জ (মার্জ) করা C++-এ


দুটি বাইনারি ট্রি দেওয়া আছে। লক্ষ্য হল সেগুলো একসাথে মার্জ করা। যদি দুটি নোড ওভারল্যাপ করে (উভয়ই নাল না হয়), তবে মানগুলো যোগ করা হয়। অন্যথায় নন-নাল নোডই নতুন ট্রিতে থাকে।

রিকার্সিভ পদ্ধতি: উভয় নোড নাল হলে নাল, একটি নাল হলে অন্যটি, উভয়ই থাকলে মান যোগ করে বাম ও ডান সাবট্রি রিকার্শিভলি মার্জ।

উদাহরণ

ট্রি ১ এবং ট্রি ২ (চিত্রে দেখানো)

মার্জ করা ট্রির ইনঅর্ডার আউটপুট: 5 4 4 3 5 7

C++ কোড উদাহরণ
#include 
using namespace std;

class TreeNode {
public:
    int val;
    TreeNode *left, *right;
    TreeNode(int v){
        val = v;
        left = right = NULL;
    }
};

void inord(TreeNode *root) {
    if (root != NULL) {
        inord(root->left);
        cout << root->val << " ";
        inord(root->right);
    }
}

class Solution {
public:
    TreeNode* solve(TreeNode* n1, TreeNode* n2) {
        if(!n1 && n2) return n2;
        else if(!n2 && n1) return n1;
        else if(!n1 && !n2) return NULL;
        n1->val += n2->val;
        n1->left = solve(n1->left, n2->left);
        n1->right = solve(n1->right, n2->right);
        return n1;
    }
};

int main(){
    TreeNode *root1 = new TreeNode(1);
    root1->left = new TreeNode(3);
    root1->right = new TreeNode(2);
    root1->left->left = new TreeNode(5);
    TreeNode *root2 = new TreeNode(2);
    root2->left = new TreeNode(1);
    root2->right = new TreeNode(3);
    root2->left->right = new TreeNode(4);
    root2->right->right = new TreeNode(7);
    Solution ob;
    TreeNode *root_res = ob.solve(root1, root2);
    inord(root_res);
    return 0;
}
আউটপুট

মার্জ করা ট্রির ইনঅর্ডার ট্রাভার্সাল:

5 4 4 3 5 7
  1. C++-এ ইউনিক বাইনারি সার্চ ট্রি II - সব ট্রি জেনারেট করা

  2. C++-এ দুটি বাইনারি ট্রি মার্জ করা

  3. C++-এ দুটি বাইনারি ট্রির প্রথম অমিল লীফ নোড (Non-matching Leaves) খুঁজে বের করা

  4. বাইনারি সার্চ C++ প্রোগ্রামে