LeetCode 热题 100 | 101. 对称二叉树
大家好,今天我们来解决一道经典的二叉树问题------对称二叉树。这道题在 LeetCode 上被标记为简单难度,要求检查给定的二叉树是否轴对称。
问题描述
给你一个二叉树的根节点 root
,检查它是否轴对称。
示例 1:
plaintext
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:
plaintext
输入:root = [1,2,2,null,3,null,3]
输出:false
提示:
- 树中节点数目在范围
[1, 1000]
内 -100 <= Node.val <= 100
解题思路
核心思想
-
递归法:
- 使用递归法检查二叉树是否对称。
- 对于两个子树,如果它们的根节点值相等,并且左子树的左子树与右子树的右子树对称,左子树的右子树与右子树的左子树对称,则这两个子树对称。
-
递归函数:
- 定义一个辅助函数
isSymmetric
,用于检查两个子树是否对称。
- 定义一个辅助函数
Python代码实现
python
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
if not root:
return True
def isMirror(left: TreeNode, right: TreeNode) -> bool:
if not left and not right:
return True
if not left or not right:
return False
return (left.val == right.val) and isMirror(left.left, right.right) and isMirror(left.right, right.left)
return isMirror(root.left, root.right)
代码解析
-
基本情况:
- 如果根节点为空,直接返回
True
,因为空树是对称的。
- 如果根节点为空,直接返回
-
递归函数:
- 定义一个辅助函数
isMirror
,用于检查两个子树是否对称。 - 如果两个子树都为空,返回
True
。 - 如果一个子树为空,另一个不为空,返回
False
。 - 如果两个子树的根节点值相等,并且左子树的左子树与右子树的右子树对称,左子树的右子树与右子树的左子树对称,则返回
True
。
- 定义一个辅助函数
-
递归调用:
- 调用
isMirror
函数,检查根节点的左子树和右子树是否对称。
- 调用
复杂度分析
- 时间复杂度 :O(n),其中
n
是树中节点的数量。每个节点被访问一次。 - 空间复杂度 :O(h),其中
h
是树的高度。递归调用栈的深度最多为树的高度。
示例运行
示例 1
plaintext
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2
plaintext
输入:root = [1,2,2,null,3,null,3]
输出:false
总结
通过递归法,我们可以高效地检查二叉树是否对称。递归函数 isMirror
用于比较两个子树是否对称,确保每个节点的值和结构都符合对称条件。希望这篇题解对大家有所帮助,如果有任何问题,欢迎在评论区留言讨论!
关注我,获取更多算法题解和编程技巧!