একটি বাইনারি ট্রি দেওয়া থাকলে, সেটি সিমেট্রিক (মিরর ইমেজে একই) কিনা যাচাই করতে হবে।
উদাহরণ: রুট=১, বাম=২(বাম=৩, ডান=৪), ডান=২(বাম=৪, ডান=৩) → True।
রিকার্সিভ সমাধান (দুটি নোড সমान्तরাল চেক)
রুটের বাম ও ডান সাবট্রি একসাথে ট্রভার্স করুন: solve(node1, node2)।
- দুটোই
None→True - একটি
None→False - মান ভিন্ন →
False - রিকার্সিভ কল:
solve(node1.left, node2.right) and solve(node1.right, node2.left)(মিররিং!)।
পাইথন কোড
class TreeNode:
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
class Solution:
def isSymmetric(self, root):
return self.solve(root, root)
def solve(self, node1, node2):
if not node1 and not node2:
return True
if not node1 or not node2:
return False
return (node1.data == node2.data and
self.solve(node1.left, node2.right) and
self.solve(node1.right, node2.left))
# টেস্ট
root = TreeNode(1, TreeNode(2, TreeNode(3), TreeNode(4)), TreeNode(2, TreeNode(4), TreeNode(3)))
ob1 = Solution()
print(ob1.isSymmetric(root)) # True
টাইম কমপ্লেক্সিটি: O(n), স্পেস: O(h)। সিমেট্রিক ট্রি চেকের ক্লাসিক রিকার্সিভ প্যাটার্ন।