দুটি বাইনারি ট্রি দেওয়া থাকলে, প্রথম ট্রির যেকোনো নোডের বাম ও ডান সাবট্রি স왪 (Flip) করলে দ্বিতীয় ট্রির মতো হয় কিনা যাচাই করতে হবে।
BFS + লেভেল-ওয়াইজ সমাধান
- দুটি কিউ দিয়ে লেভেল অর্ডার ট্রভার্সাল।
- প্রতিটি লেভেলে নোড মানগুলো কালেক্ট করুন।
- নেক্সট লেভেলের জন্য: ট্রি-১-এর নোডের ডান পাশেলোফ্ট, বাম পাশেরাইট পুশ করুন (স왪 অনুকরণ)। ট্রি-২-এর জন্য নরমাল পুশ।
- প্রতিটি লেভেলে মানগুলো সমান কিনা চেক করুন (অথবা রিভার্স সমান কিনা)।
পাইথন কোড
class TreeNode:
def __init__(self, data, left=None, right=None):
self.val = data
self.left = left
self.right = right
class Solution:
def solve(self, root0, root1):
que1, que2 = [root0], [root1]
while que1 and que2:
temp1, temp2 = [], []
values1, values2 = [], []
if len(que1) != len(que2):
return False
for i in range(len(que1)):
values1.append(que1[i].val)
values2.append(que2[i].val)
# Tree 0: Flip simulation (Right first, then Left)
if que1[i].right:
temp1.append(que1[i].right)
if que1[i].left:
temp1.append(que1[i].left)
# Tree 1: Normal
if que2[i].right:
temp2.append(que2[i].right)
if que2[i].left:
temp2.append(que2[i].left)
if values1 != values2 and values1 != values2[::-1]:
return False
que1, que2 = temp1, temp2
return True
# টেস্ট
ob = Solution()
root = TreeNode(2, None, TreeNode(4, TreeNode(3), TreeNode(5)))
root1 = TreeNode(2, TreeNode(4, TreeNode(3), TreeNode(5)), None)
print(ob.solve(root, root1)) # True
টাইম কমপ্লেক্সিটি: O(n), স্পেস: O(w) (w = ম্যাক্সimum-width)। এটি লিটকোড "Flip Equivalent Binary Trees" সমস্যা।