跳到主要内容

101. 对称二叉树

题目描述

给你一个二叉树的根节点 root,检查它是否轴对称。

示例

示例 1:

输入:root = [1,2,2,3,4,4,3]
输出:true

示例 2:

输入:root = [1,2,2,null,3,null,3]
输出:false

解题思路

第一步:理解问题本质

二叉树对称的条件:

  • 根节点的左右子树镜像对称
  • 左子树的左子树 == 右子树的右子树
  • 左子树的右子树 == 右子树的左子树

第二步:最优解法 —— 递归

核心洞察

  • 将"相同的树"的判断改为"镜像相同"的判断
  • isSameTree(p, q) 改为比较 p.leftq.rightp.rightq.left

完整代码实现

from typing import Optional

class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right

class Solution:
"""
对称二叉树 - 递归

核心思想:
二叉树对称的条件是根节点的左右子树镜像对称。

判断镜像对称:
- 两个根节点的值相等
- 左子树的左子树 == 右子树的右子树
- 左子树的右子树 == 右子树的左子树

时间复杂度:O(n)
空间复杂度:O(h),h 是树的高度
"""

def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:
if p is None or q is None:
return p is q
return p.val == q.val and self.isSameTree(p.left, q.right) and self.isSameTree(p.right, q.left)

def isSymmetric(self, root: Optional[TreeNode]) -> bool:
return self.isSameTree(root.left, root.right)

复杂度分析

解法时间复杂度空间复杂度
递归(最优)O(n)O(h)

相关题目

加载评论中...