返回

破解 LeetCode 100:相同的树,解锁二叉树比较秘籍

见解分享







## LeetCode 100:相同的树

**题目** 

给你两棵二叉树的根节点 `root``subRoot`。判断这两棵树是否相同。如果两棵树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

**示例:** 

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


**限制:** 

* 两棵树均可能为空。
* 两棵树上的节点数目范围是 `[0, 100]`。
* `-100 <= Node.val <= 100`

## 递归算法:步步深入,逐层比较

解题的关键在于巧妙运用递归算法,对两棵树进行逐层比较。递归算法就像一台精密仪器,将问题逐步分解成更小的子问题,最终还原出问题的本质。

1. **递归基准:** 

   - 当两棵树都为空时,返回 `True`。
   - 当两棵树有一棵为空时,返回 `False`。
   - 当两棵树的根节点值不同时,返回 `False`。

2. **递归步骤:** 

   - 比较左子树是否相同。
   - 比较右子树是否相同。

```python
def isSameTree(root, subRoot):
    if not root and not subRoot:
        return True
    if not root or not subRoot:
        return False
    if root.val != subRoot.val:
        return False
    
    return isSameTree(root.left, subRoot.left) and isSameTree(root.right, subRoot.right)

生动比喻:两棵树的亲子鉴定

把两棵树的比较想象成一场亲子鉴定。我们要逐层检查两棵树的结构和基因(节点值),确定它们是否拥有相同的血缘关系。

  • 根节点: 如同父母,必须首先确认他们的身份是否相同。
  • 子节点: 如同子女,需要分别比较左子树和右子树,看是否与对应位置的子节点基因相同。

如果每一层比较都成功通过,那么这两棵树就是孪生兄弟,否则它们就是毫无血缘关系的陌生人。

示例代码:一步步演示比较过程

# 给定两棵二叉树的根节点
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)

subRoot = TreeNode(1)
subRoot.left = TreeNode(2)
subRoot.right = TreeNode(3)

# 执行递归比较
result = isSameTree(root, subRoot)

# 打印结果
print("两棵树是否相同:", result)

运行以上代码,输出结果为 True,表明两棵树在结构和节点值上完全相同。

结语:精益求精,解锁解题新高度

通过本文对 LeetCode 100 题的深入剖析,我们掌握了递归算法在二叉树比较中的巧妙应用。破解 LeetCode 不仅是代码的编写,更是思维的较量。只有不断精益求精,才能解锁解题新高度,在算法的海洋中乘风破浪。