101. 对称二叉树#
对称的诗意:生活中的平衡美学#
想象一个完美的世界,两侧如同镜像般精准对称。在自然界中,对称常常意味着美感和和谐。二叉树的对称性也是如此 —— 一种近乎艺术的数学之美,它不仅仅是结构,更是一种深层的平衡哲学。
问题描述#
题目目标#
给你一个二叉树的根节点 root ,检查它是否轴对称。
示例 1#
输入: root = [1,2,2,3,4,4,3]
输出: true
二叉树示意:
1
/ \
2 2
/ \ / \
3 4 4 3text说明: 左右两棵子树互为镜像,所以这棵树是对称的,结果为 true。
补充说明#
- 二叉树通常使用层序数组表示,
null表示该位置没有节点。
对称的本质:镜面的数学逻辑#
对称二叉树(LeetCode第101题)是一种特殊的树,它要求:
- 根节点的左右子树完全镜像
- 对应位置的节点具有相同的值
- 树的结构在轴心处完美对折
这就像是一个精心设计的万花筒,每一个角度都呈现出令人惊叹的平衡。
递归解法:镜像对比的优雅#
public boolean isSymmetric(TreeNode root) {
// 边界情况:空树天然对称
if (root == null) return true;
// 比较左右子树是否互为镜像
return isMirror(root.left, root.right);
}
private boolean isMirror(TreeNode left, TreeNode right) {
// 情况1:两个节点都为空,说明该位置镜像匹配
if (left == null && right == null) return true;
// 情况2:只有一个为空,结构不一致,必然不对称
if (left == null || right == null) return false;
// 情况3:两个节点都不为空时,需要同时满足:
// ① 当前值相等
// ② left 的左子树 与 right 的右子树镜像
// ③ left 的右子树 与 right 的左子树镜像
return (left.val == right.val) &&
isMirror(left.left, right.right) &&
isMirror(left.right, right.left);
}java代码的深层逻辑解析#
-
第一层方法
isSymmetric()- 处理根节点特殊情况
- 将复杂的对称判断委托给专门的镜像比较方法
-
镜像比较方法
isMirror()- 首先处理节点为空的边界情况
- 要求左右子树节点值相同
- 递归比较左右子树的镜像位置
迭代方法:显式的对称之旅#
public boolean isSymmetric(TreeNode root) {
// 边界处理:空树直接判定为对称
if (root == null) return true;
// 队列按“成对节点”进行镜像比较
Queue<TreeNode> queue = new LinkedList<>();
// 左右子树根节点成对入队
queue.offer(root.left);
queue.offer(root.right);
// 每轮弹出两个节点进行比较
while (!queue.isEmpty()) {
// 取出镜像位置的一对节点
TreeNode left = queue.poll();
TreeNode right = queue.poll();
// 两个都为空:该对位置匹配,继续比较下一对
if (left == null && right == null) continue;
// 一个为空或值不同:不满足镜像,立即返回 false
if (left == null || right == null || left.val != right.val)
return false;
// 按镜像配对顺序入队:
// left.left 对应 right.right
// left.right 对应 right.left
queue.offer(left.left);
queue.offer(right.right);
queue.offer(left.right);
queue.offer(right.left);
}
// 所有成对节点都比较通过,说明整棵树对称
return true;
}java迭代方法的独特视角#
- 显式地模拟镜像遍历
- 使用队列管理节点配对
- 每次处理两个对应位置的节点
- 避免了递归可能的栈空间问题
性能分析:效率的数学之美#
时间复杂度:O(n)#
- 每个节点仅访问一次
- n为树中节点总数
- 无论递归还是迭代,都高效地遍历整棵树
空间复杂度#
- 递归版本:O(h),h为树的高度
- 最坏情况可达O(n)
- 最好情况(平衡树)为O(log n)
- 迭代版本:O(w),w为树的最大宽度
- 通常空间效率更可控
递归的诗:平衡与重复的艺术#
对称二叉树不仅仅是一道算法题,更是递归思想的诗意表达。它启示我们:
- 复杂的对称可以通过简单的重复规则构建
- 递归是理解对称性的强大工具
- 代码的优雅源于思维的对称与平衡
探索对称二叉树就像在知识的镜子中发现宇宙的韵律,重要的是保持好奇和对美的敏感!