给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1 / \ 2 2 / \ / \ 3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1 / \ 2 2 \ \ 3 3 # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def isSymmetric(self, root: TreeNode) -> bool: # BFS迭代法 # 在队列中同时取出两个节点node1, node2,判断这两个节点的值是否相等,然后把他们的孩子中按照 # (node1.left, node2.right) 一组,(node1.right, node2.left)一组放入队列中 queue = collections.deque() if not root: return True else: queue.append((root.left, root.right)) while queue: left, right = queue.popleft() if not left and not right: continue if not left or not right: return False if left.val != right.val: return False queue.append((left.left, right.right)) queue.append((left.right, right.left)) return True ''' 递归法 def check(Node1, Node2): # 新写一个检查两个节点相等的函数 if not Node1 and not Node2 : # 如果两个节点都为空,返回True return True elif not Node1 or not Node2: # 如果任意一个节点都为空,返回False return False if Node1.val != Node2.val: # val不相等,返回False return False else: # val值相等,则递归比较:节点1的左孩子是否等于节点2的右孩子 # 并且节点1的右孩子是否等于节点2的左孩子 return check(Node1.left, Node2.right) and check(Node1.right, Node2.left) return check(root, root) '''