问题简介
LeetCode 101. 对称二叉树
题目描述
给你一个二叉树的根节点 root,检查它是否轴对称。
示例说明
示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false
提示:
- 树中节点数目在范围
[1, 1000]内 -100 <= Node.val <= 100
解题思路
方法一:递归法(推荐)
核心思想:一棵二叉树是对称的,当且仅当它的左子树和右子树互为镜像。
步骤分析:
- 定义递归函数:
isMirror(left, right)判断两个子树是否互为镜像 - 递归终止条件:
- 如果两个节点都为空 → 对称
- 如果其中一个为空,另一个不为空 → 不对称
- 如果两个节点值不相等 → 不对称
- 递归关系:
- 左子树的左孩子 与 右子树的右孩子 对称
- 左子树的右孩子 与 右子树的左孩子 对称
递归逻辑:
isMirror(left, right) = (left == null && right == null) ||
(left != null && right != null && left.val == right.val &&
isMirror(left.left, right.right) &&
isMirror(left.right, right.left))
方法二:迭代法(使用队列)
核心思想:使用队列模拟递归过程,逐层比较对称位置的节点。
步骤分析:
- 初始化队列:将根节点的左右子节点加入队列
- 循环处理:
- 从队列中取出两个节点进行比较
- 如果都为空,继续下一轮
- 如果一个为空或值不等,返回 false
- 将对应的对称子节点按顺序加入队列:
left.left和right.rightleft.right和right.left
- 队列为空时:说明所有对称位置都匹配,返回 true
方法对比
| 方法 | 时间复杂度 |
|---|


