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

C++-এ বাইনারি ট্রির ক্লোনের মধ্যে টার্গেট নোড খুঁজে বের করা


ধরুন আমাদের original এবং cloned নামে দুটি বাইনারি ট্রি আছে এবং original ট্রি-এ একটি target নোডের রেফারেন্স দেওয়া আছে। cloned ট্রি আসলে original ট্রির একটি কপি। আমাদের cloned ট্রি-এ সেই নোডের রেফারেন্স খুঁজে বের করতে হবে।

ট্রি যদি নিচের মতো হয় এবং target 3 হয়, তবে আউটপুট হবে 3।

C++-এ বাইনারি ট্রির ক্লোনের মধ্যে টার্গেট নোড খুঁজে বের করা

সমাধানের ধাপগুলো:

  • solve() মেথড ডিফাইন করুন, যা node1, node2, target নেবে

  • যদি node1 null হয়, তবে null রিটার্ন করুন

  • যদি node1 == target এবং node1-এর ভ্যালু node2-এর ভ্যালুর সমান হয়, তবে node2 রিটার্ন করুন

  • leftPart := solve(node1-এর লেফট, node2-এর লেফট, target)

  • rightPart := solve(node1-এর রাইট, node2-এর রাইট, target)

  • যদি leftPart null নয় হয়, তবে leftPart রিটার্ন করুন, অন্যথায় rightPart

  • মেইন মেথড থেকে return solve(original, cloned, target) কল করুন

উদাহরণ (C++)

নিচের ইমপ্লিমেন্টেশন দেখুন ভালো বুঝতে −

#include <bits/stdc++.h> using namespace std; class TreeNode{    public:    int val;    TreeNode *left, *right;    TreeNode(int data){       val = data;       left = right = NULL;    } }; void insert(TreeNode **root, int val){    queue<TreeNode*> q;    q.push(*root);    while(q.size()){       TreeNode *temp = q.front();       q.pop();       if(!temp->left){          if(val != NULL)          temp->left = new TreeNode(val);       else          temp->left = new TreeNode(0);       return;       } else {          q.push(temp->left);       }       if(!temp->right){          if(val != NULL)             temp->right = new TreeNode(val);          else             temp->right = new TreeNode(0);          return;       } else {          q.push(temp->right);       }    } } TreeNode *make_tree(vector<int> v){    TreeNode *root = new TreeNode(v[0]);    for(int i = 1; i<v.size(); i++){       insert(&root, v[i]);    }    return root; } class Solution {    public:    TreeNode* solve(TreeNode* node1, TreeNode* node2, TreeNode*    target){       if(!node1) return NULL;       if(node1 == target && node1->val == node2->val) return node2;       TreeNode* leftPart = solve(node1->left, node2->left, target);       TreeNode* rightPart = solve(node1->right, node2->right, target);       return leftPart? leftPart : rightPart;    }    TreeNode* getTargetCopy(TreeNode* original, TreeNode* cloned,    TreeNode* target) {       return solve(original, cloned, target);    } }; main(){    vector<int> v = {7,4,3,NULL,NULL,6,19};    TreeNode *root = make_tree(v);    TreeNode *cloned = make_tree(v);    TreeNode *target = root->right; //ভ্যালু ৩-ওয়ালা নোড    Solution ob;    cout << (ob.getTargetCopy(root, cloned, target))->val; }

ইনপুট

[7,4,3,null,null,6,19] 3

আউটপুট

3
  1. সি++-এ বাইনারি ট্রি ক্যামেরা

  2. বাইনারি ট্রিতে নিকটতম লিফ নোড খুঁজে বের করা (C++)

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

  4. C++-এ বাইনারি সার্চ ট্রি (BST)-এ সর্বনিম্ন মান্যুক্ত নোড (Node) খুঁজে বের করা