###题目
判断一棵二叉树是否对称
解题思路
简单的思路可以通过层次遍历+镜像树的思路实现。
初始que中存入(root,root)
每次循环中,存入每一层的(left.right, right.left)和(left.left, right.right).
限制条件:left, right = que.popleft()
判断无枝?->单枝?->两枝?
- 若为无枝,则继续弹出下一组元素判断。
- 若为单枝,则一定不对称,返回False。
- 若为两枝,则判断值是否相等:
- 不相等则返回False
- 相等则将
(left.left,right.right)
和(left.right,right.left)
压入队列
代码
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
from collections import deque
def isSymmetric(self, root: TreeNode) -> bool:
#层次遍历&建立镜像树
que = deque()
que.append((root, root))
while que:
left,right = que.popleft()
#判断条件不能变:无枝->单枝->两枝
if not left and not right: continue#无枝,继续下一个判断
if not left or not right:return False#只有单枝,不对称
if left.val != right.val:return False#存在两枝,但值不等,不对称
que.append((left.left,right.right))
que.append((left.right,right.left))
return True