ধরুন আমাদের কাছে সোর্স এবং টার্গেট নামে দুটি বাইনারি ট্রি আছে; আমাদের পরীক্ষা করতে হবে যে উৎসের কিছু বিপরীত T আছে কি না যাতে এটি লক্ষ্যের একটি সাবট্রি। সুতরাং, এর মানে টার্গেটে একটি নোড রয়েছে যা তার সমস্ত বংশধর সহ T-এর মতো মান এবং কাঠামোতে অভিন্ন।
আমরা জানি যে একটি গাছকে অন্য গাছের বিপরীত বলা হয় যদি হয় −
-
উভয় গাছই খালি
-
এর বাম এবং ডান শিশু ঐচ্ছিকভাবে অদলবদল করা হয় এবং এর বাম এবং ডান উপবৃক্ষগুলি বিপরীত হয়৷
সুতরাং, যদি ইনপুট উৎসের মত হয়

লক্ষ্য

তাহলে আউটপুট হবে True
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি ফাংশন চেক () নির্ধারণ করুন, এটি node1, node2,
নেবে -
যদি node1 এবং node2 উভয়ই শূন্য হয়, তাহলে −
-
প্রত্যাবর্তন সত্য
-
-
যদি node1 বা node2 তাদের মধ্যে যেকোন একটি শূন্য হয়, তাহলে −
-
মিথ্যা ফেরত দিন
-
-
যদি node1 এর val node2 এর val এর সমান না হয়, তাহলে −
-
মিথ্যা ফেরত দিন
-
-
op1 :=চেক (নোড 1 এর বাম, নোড 2 এর বামে) এবং চেক (নোড1 এর ডান, নোড2 এর ডানদিকে)
-
op2 :=চেক (নোড 1 এর ডানে, নোড 2 এর বামে) এবং চেক (নোড1 এর বামে, নোড2 এর ডানদিকে)
-
op1 এবং op2-এর মধ্যে অন্তত একটি সত্য হলে সত্য ফেরত দিন
-
একটি ফাংশন সল্ভ(), এটি সোর্স, টার্গেট,
নেবে -
যদি উৎস এবং লক্ষ্য খালি হয়, তাহলে −
-
প্রত্যাবর্তন সত্য
-
-
যদি উৎস বা লক্ষ্য তাদের মধ্যে যেকোনো একটি শূন্য হয়, তাহলে −
-
মিথ্যা ফেরত দিন
-
-
op1 :=চেক (লক্ষ্য, উৎস)
-
যদি op1 সত্য হয়, তাহলে −
-
প্রত্যাবর্তন সত্য
-
-
সলভ (উৎস, টার্গেটের বাঁদিকে) বা সমাধান (উৎস, লক্ষ্যের ডানদিকে) সত্য হলে সত্য ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
class TreeNode {
public:
int val;
TreeNode *left, *right;
TreeNode(int data) {
val = data;
left = NULL;
right = NULL;
}
};
class Solution {
public:
bool check(TreeNode* node1, TreeNode* node2){
if(!node1 && !node2)
return true;
if(!node1 || !node2)
return false;
if(node1->val != node2->val) {
return false;
}
bool op1 = check(node1->left, node2->left) && check(node1->right, node2->right);
bool op2 = check(node1->right, node2->left) && check(node1->left, node2->right);
return op1 || op2;
}
bool solve(TreeNode* source, TreeNode* target) {
if(!target && !source)
return true;
if(!target || !source)
return false;
bool op1 = check(target, source);
if(op1)
return true;
return solve(source, target->left) || solve(source, target->right);
}
};
main(){
Solution ob;
TreeNode *target = new TreeNode(6);
target->left = new TreeNode(3);
target->right = new TreeNode(1);
target->right->left = new TreeNode(3);
target->right->right = new TreeNode(2);
target->right->right->left = new TreeNode(4);
TreeNode *source = new TreeNode(1);
source->left = new TreeNode(2);
source->right = new TreeNode(3);
source->left->right = new TreeNode(4);
cout << (ob.solve(source, target));
} ইনপুট
TreeNode *target = new TreeNode(6); target->left = new TreeNode(3); target->right = new TreeNode(1); target->right->left = new TreeNode(3); target->right->right = new TreeNode(2); target->right->right->left = new TreeNode(4); TreeNode *source = new TreeNode(1); source->left = new TreeNode(2); source->right = new TreeNode(3); source->left->right = new TreeNode(4);
আউটপুট
1