ধরুন আমাদের একটি বাইনারি গাছ আছে। গাছটি সিমেট্রিক ট্রি কি না তা দেখতে হবে। একটি গাছকে প্রতিসাম্য বলা হবে যদি আমরা এটির মিরর ইমেজ গ্রহণ করি তখন এটি একই হয়। এই দুটি গাছ থেকে, প্রথমটি প্রতিসম, কিন্তু দ্বিতীয়টি নয়৷
৷
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব৷
- আমরা নিম্নলিখিত ধাপগুলিকে পুনরাবৃত্তভাবে কল করব৷ ফাংশনটি সল্ভ (রুট, রুট) হবে
- যদি নোড 1 এবং নোড 2 খালি থাকে, তাহলে সত্য ফেরত দিন
- যদি node1 বা node2 খালি হয়, তাহলে মিথ্যা ফেরত দিন
- সত্যে ফিরে আসে যখন node1.val =node2.val এবং solve(node1.left, node2.right) এবং solve(node1.right, node2.left)
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
class TreeNode: def __init__(self, data, left = None, right = None): self.data = data self.left = left self.right = right def insert(temp,data): que = [] que.append(temp) while (len(que)): temp = que[0] que.pop(0) if (not temp.left): if data is not None: temp.left = TreeNode(data) else: temp.left = TreeNode(0) break else: que.append(temp.left) if (not temp.right): if data is not None: temp.right = TreeNode(data) else: temp.right = TreeNode(0) break else: que.append(temp.right) def make_tree(elements): Tree = TreeNode(elements[0]) for element in elements[1:]: insert(Tree, element) return Tree class Solution(object): def isSymmetric(self, root): """ :type root: TreeNode :rtype: bool """ 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 # print(node1.val, node2.val) return node1.data == node2.data and self.solve(node1.left,node2.right) and self.solve(node1.right,node2.left) tree1 = make_tree([1,2,2,3,4,4,3]) tree2 = make_tree([1,2,2,3,4,None,3]) ob1 = Solution() print(ob1.isSymmetric(tree1)) print(ob1.isSymmetric(tree2))
ইনপুট
tree1 = make_tree([1,2,2,3,4,4,3]) tree2 = make_tree([1,2,2,3,4,None,3])
আউটপুট
True False