您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# LeetCode中如何解决相同的树问题
## 引言
在LeetCode的算法题库中,"相同的树"(Same Tree)是一个经典的二叉树相关问题,通常被标记为简单难度。该问题要求判断两棵二叉树在结构和节点值上是否完全相同。本文将深入探讨该问题的多种解法,包括递归法、迭代法,并分析其时间复杂度和空间复杂度,最后提供相应的代码实现。
---
## 问题描述
**题目编号**:100
**题目名称**:相同的树
**题目描述**:给定两棵二叉树的根节点 `p` 和 `q`,编写一个函数来检验它们是否相同。如果两棵树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
**示例 1**:
输入: p = [1,2,3], q = [1,2,3] 输出: true
**示例 2**:
输入: p = [1,2], q = [1,null,2] 输出: false
---
## 解题思路
### 方法一:递归法
递归是解决树问题的常见方法。对于两棵树是否相同,可以通过以下步骤判断:
1. **终止条件**:
- 如果两棵树的当前节点均为 `null`,返回 `true`。
- 如果一棵树的当前节点为 `null` 而另一棵不为 `null`,返回 `false`。
- 如果两棵树的当前节点值不同,返回 `false`。
2. **递归逻辑**:
- 分别递归比较左子树和右子树。
#### 代码实现(Python)
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
if not p and not q:
return True
if not p or not q:
return False
if p.val != q.val:
return False
return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
递归法可能存在栈溢出风险(尤其是树很深时),因此可以使用迭代法。通过队列(或栈)实现广度优先搜索(BFS),逐层比较节点。
false
。false
。from collections import deque
class Solution:
def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
queue = deque([(p, q)])
while queue:
node_p, node_q = queue.popleft()
if not node_p and not node_q:
continue
if not node_p or not node_q:
return False
if node_p.val != node_q.val:
return False
queue.append((node_p.left, node_q.left))
queue.append((node_p.right, node_q.right))
return True
类似BFS,但使用栈实现深度优先搜索(DFS)。
class Solution:
def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
stack = [(p, q)]
while stack:
node_p, node_q = stack.pop()
if not node_p and not node_q:
continue
if not node_p or not node_q:
return False
if node_p.val != node_q.val:
return False
stack.append((node_p.left, node_q.left))
stack.append((node_p.right, node_q.right))
return True
true
。false
。解决“相同的树”问题主要有递归和迭代两种思路: - 递归法:代码简洁,适合树深度不大的场景。 - 迭代法:通过队列或栈实现,避免递归栈溢出风险。
根据实际场景选择合适的方法,并注意边界条件处理。
# 测试用例1:两棵树相同
p = TreeNode(1, TreeNode(2), TreeNode(3))
q = TreeNode(1, TreeNode(2), TreeNode(3))
assert Solution().isSameTree(p, q) == True
# 测试用例2:结构不同
p = TreeNode(1, TreeNode(2))
q = TreeNode(1, None, TreeNode(2))
assert Solution().isSameTree(p, q) == False
”`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。