题目
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
进阶:
你可以运用递归和迭代两种方法解决这个问题吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/symmetric-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
借鉴
广度优先搜索方法,有一种实现思路,是将两棵树同时作比较,在队列中同时取出两个节点left, right,判断两者是否相等,然后把他们的孩子中按照(left.left, right.right) 一组,(left.right, right.left)一组放入队列中。
广度优先搜索的方法特点:
正常情况下,需要把所有的节点都检查完才能确定返回结果True,除非提前遇到不同的节点值而终止返回False。
提交代码
# 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:
queue = collections.deque()
queue.append((root, root))
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
#链接:https://leetcode-cn.com/problems/symmetric-tree/solution/bfs-dui-lie-tong-shi-bao-cun-bao-cun-yao-pan-duan-/
学习总结
- 队列和广度优先搜索遍历的方法,同时设计两组进行展开,两组同时遍历
- 对称二叉树的特征