问题描述
给你一个二叉树的根节点 root , 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false
解决办法
- 使用双向队列的方法,首先导入deque库
from collections import deque
- 判断root,如果 root 为空,返回 True
- 定义一个dq队列,刚开始放 root 的左右结点,开始遍历。队列的特点是先进先出,所以依次放入左结点和右结点:
left_node=dq.popleft()
right_node=dq.popleft()
- 判断:如果左结点和右结点都不存在,跳出本次循环,继续往下遍历。
- 如果左结点在,右结点不在。或者左结点不在,右结点在。又或者左结点的值不等于右结点的值,则不是对称二叉树,返回False。
- 除以上情况外,令左子树的左结点、右子树的右结点、左子树的右结点、右子树的左结点一次入队,继续遍历。
代码示例
from collections import deque
class Solution:
def isSymmetric(self, root: Optional[TreeNode]) -> bool:
if root is None:
return True
dq=deque([root.left,root.right])
while dq:
left_node=dq.popleft()
right_node=dq.popleft()
if not left_node and not right_node:
continue
if not left_node or not right_node or left_node.val!=right_node.val:
return False
dq.append(left_node.left)
dq.append(right_node.right)
dq.append(left_node.right)
dq.append(right_node.left)
return True