返回
漫步树端寻奥秘:LeetCode100 相同的树之旅
前端
2023-11-26 19:58:14
**导读:**
LeetCode 100 是一道经典的二叉树比较问题,旨在考察我们对二叉树结构和递归算法的掌握程度。我们将在本篇文章中详细剖析问题的关键点,并提供一种简洁明了的递归解决方案。
**问题引入:**
给定两棵二叉树的根节点 p 和 q,我们需要判断这两棵树是否相同。所谓相同,是指两棵树在结构上完全一致,且每个节点的值也完全相同。如果满足这些条件,则认为这两棵树是相同的。
**解决方案:**
**1. 递归算法思想:**
解决这个问题的一个直观思路是采用递归算法。递归算法的基本思想是将问题分解成更小的子问题,然后逐个解决这些子问题,最终得到整个问题的答案。在这种情况下,我们可以将比较两棵树的任务分解成比较它们的根节点、左子树和右子树。
**2. 递归算法流程:**
(1) 首先比较两棵树的根节点的值。如果根节点的值不相等,则直接返回 false,表明这两棵树不同。
(2) 如果根节点的值相等,则分别递归比较两棵树的左子树和右子树。
(3) 如果左子树和右子树都比较相等,则返回 true,表明这两棵树相同。
(4) 如果左子树或右子树比较不相等,则返回 false,表明这两棵树不同。
**3. 代码实现:**
```python
def is_same_tree(p, q):
"""
比较两棵二叉树是否相同。
Args:
p: 第一棵二叉树的根节点。
q: 第二棵二叉树的根节点。
Returns:
如果两棵树相同,返回 True;否则返回 False。
"""
# 如果 p 和 q 都为空,则它们相同。
if not p and not q:
return True
# 如果 p 或 q 为空,则它们不同。
if not p or not q:
return False
# 如果 p 和 q 的根节点值不相等,则它们不同。
if p.val != q.val:
return False
# 递归比较 p 和 q 的左子树。
if not is_same_tree(p.left, q.left):
return False
# 递归比较 p 和 q 的右子树。
if not is_same_tree(p.right, q.right):
return False
# 如果 p 和 q 的左子树和右子树都比较相等,则返回 True。
return True
代码说明:
在上面的代码中,我们定义了一个名为 is_same_tree 的函数,该函数接受两个二叉树的根节点作为参数,并返回一个布尔值,表示这两棵树是否相同。函数首先比较两棵树的根节点的值。如果根节点的值不相等,则直接返回 False,表明这两棵树不同。
如果根节点的值相等,则分别递归比较两棵树的左子树和右子树。如果左子树和右子树都比较相等,则返回 True,表明这两棵树相同。如果左子树或右子树比较不相等,则返回 False,表明这两棵树不同。
总结:
在本文中,我们探讨了 LeetCode 100 题的解法,即比较两棵二叉树是否相同。我们采用递归算法来解决这个问题,通过比较两棵树的根节点、左子树和右子树,最终确定两棵树是否相同。希望这篇文章对读者理解二叉树的比较算法有所帮助。