对称二叉树-LeetCode
101. 对称二叉树 - Symmetric Tree
🎯 问题描述(来源于LeetCode)
描述:
给你一个二叉树的根节点 root,检查它是否轴对称(即镜像对称)。
说明:
- 轴对称意味着二叉树绕根节点中心对折后,左右两侧的节点值和结构完全一致。
- 空树被认为是轴对称的。
示例:
- 示例 1:
1 | 输入: root = [1,2,2,3,4,4,3] |
- 示例 2:
1 | 输入: root = [1,2,2,null,3,null,3] |
💻 解题思路
思路1:递归镜像比较
算法步骤
-
处理根节点:
- 如果根节点为空,直接返回
True(空树对称)。 - 否则,调用辅助函数比较根节点的左子树和右子树是否镜像对称。
- 如果根节点为空,直接返回
-
定义辅助函数
- 输入两个节点
p和q,判断它们是否为镜像关系。 - 递归出口:如果
p或q有一个为None,则只有当两者同时为None时才返回True,否则False。 - 递归步骤:
当前节点值相等 (p.val == q.val)
并且p的左子树与q的右子树镜像对称
并且p的右子树与q的左子树镜像对称。
- 输入两个节点
-
返回结果:
isSymmetric直接返回isSameTree(root.left, root.right)。
思路1:代码实现
1 | # Definition for a binary tree node. |
思路1:📊 性能分析
复杂度验证
- 时间复杂度:,其中 为二叉树的节点数。每个节点恰好被访问一次。
- 空间复杂度:,其中 为二叉树的高度。递归调用栈的深度最大为树的高度,最坏情况(链状)为 。
思考
- 本题也可以用**迭代(队列/BFS)**实现:每次取出两个节点比较,然后按镜像顺序(左-右、右-左)入队。
- 注意代码中
if root.left is None or root.right is None: return root.left == root.right这一句可以简化。实际上当根节点非空时,直接调用isSameTree也能处理None的情况,因为isSameTree已经包含了判空逻辑。不过原代码这样写也能正确运行。 - 对称二叉树是树相关问题的经典递归练习,理解“镜像比较”的递归结构对解决其他变形题(如翻转二叉树、判断子树等)很有帮助。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 笺札!






