1. 题目解析与核心思路
LeetCode 116题"相同的树"和"对称二叉树"是二叉树类问题中的经典题目,考察了对二叉树结构的理解和递归算法的应用能力。这两个问题看似简单,但包含了二叉树遍历和比较的核心思想。
1.1 相同的树问题
给定两棵二叉树的根节点p和q,判断它们是否完全相同。这里的"相同"指的是:
- 两棵树的结构完全相同
- 对应节点的值完全相同
1.2 对称二叉树问题
给定一棵二叉树的根节点root,判断这棵树是否是镜像对称的。即:
- 左子树和右子树互为镜像
- 对应节点的值相同
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 递归解法详解
递归是解决这类树形结构问题最自然的方式,因为它完美匹配了树本身的递归定义。
2.1 相同的树递归解法
python复制def isSameTree(p, q):
# 基本情况1:两棵树都为空
if not p and not q:
return True
# 基本情况2:其中一棵树为空
if not p or not q:
return False
# 基本情况3:节点值不相等
if p.val != q.val:
return False
# 递归比较左右子树
return isSameTree(p.left, q.left) and isSameTree(p.right, q.right)
关键点解析:
- 基本情况处理:空树情况优先判断
- 节点值比较:当前节点值必须相等
- 递归调用:同时比较左右子树
2.2 对称二叉树递归解法
python复制def isSymmetric(root):
if not root:
return True
return isMirror(root.left, root.right)
def isMirror(left, right):
# 基本情况1:两个子树都为空
if not left and not right:
return True
# 基本情况2:其中一个子树为空
if not left or not right:
