给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [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)
'''