mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-11 04:54:51 +08:00
Update 0617.合并二叉树.md
添加 创建 root节点 和 python queue的代码优化版本
This commit is contained in:
@ -352,8 +352,7 @@ class Solution {
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Python
|
### Python
|
||||||
|
(版本一) 递归 - 前序 - 修改root1
|
||||||
**递归法 - 前序遍历**
|
|
||||||
```python
|
```python
|
||||||
# Definition for a binary tree node.
|
# Definition for a binary tree node.
|
||||||
# class TreeNode:
|
# class TreeNode:
|
||||||
@ -377,8 +376,33 @@ class Solution:
|
|||||||
return root1 # ⚠️ 注意: 本题我们重复使用了题目给出的节点而不是创建新节点. 节省时间, 空间.
|
return root1 # ⚠️ 注意: 本题我们重复使用了题目给出的节点而不是创建新节点. 节省时间, 空间.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
(版本二) 递归 - 前序 - 新建root
|
||||||
|
```python
|
||||||
|
# Definition for a binary tree node.
|
||||||
|
# class TreeNode:
|
||||||
|
# def __init__(self, val=0, left=None, right=None):
|
||||||
|
# self.val = val
|
||||||
|
# self.left = left
|
||||||
|
# self.right = right
|
||||||
|
class Solution:
|
||||||
|
def mergeTrees(self, root1: TreeNode, root2: TreeNode) -> TreeNode:
|
||||||
|
# 递归终止条件:
|
||||||
|
# 但凡有一个节点为空, 就立刻返回另外一个. 如果另外一个也为None就直接返回None.
|
||||||
|
if not root1:
|
||||||
|
return root2
|
||||||
|
if not root2:
|
||||||
|
return root1
|
||||||
|
# 上面的递归终止条件保证了代码执行到这里root1, root2都非空.
|
||||||
|
root = TreeNode() # 创建新节点
|
||||||
|
root.val += root1.val + root2.val# 中
|
||||||
|
root.left = self.mergeTrees(root1.left, root2.left) #左
|
||||||
|
root.right = self.mergeTrees(root1.right, root2.right) # 右
|
||||||
|
|
||||||
|
return root # ⚠️ 注意: 本题我们创建了新节点.
|
||||||
|
|
||||||
**迭代法**
|
```
|
||||||
|
|
||||||
|
(版本三) 迭代
|
||||||
```python
|
```python
|
||||||
class Solution:
|
class Solution:
|
||||||
def mergeTrees(self, root1: TreeNode, root2: TreeNode) -> TreeNode:
|
def mergeTrees(self, root1: TreeNode, root2: TreeNode) -> TreeNode:
|
||||||
@ -413,7 +437,44 @@ class Solution:
|
|||||||
|
|
||||||
return root1
|
return root1
|
||||||
```
|
```
|
||||||
|
(版本四) 迭代 + 代码优化
|
||||||
|
```python
|
||||||
|
# Definition for a binary tree node.
|
||||||
|
# class TreeNode:
|
||||||
|
# def __init__(self, val=0, left=None, right=None):
|
||||||
|
# self.val = val
|
||||||
|
# self.left = left
|
||||||
|
# self.right = right
|
||||||
|
from collections import deque
|
||||||
|
|
||||||
|
class Solution:
|
||||||
|
def mergeTrees(self, root1: TreeNode, root2: TreeNode) -> TreeNode:
|
||||||
|
if not root1:
|
||||||
|
return root2
|
||||||
|
if not root2:
|
||||||
|
return root1
|
||||||
|
|
||||||
|
queue = deque()
|
||||||
|
queue.append((root1, root2))
|
||||||
|
|
||||||
|
while queue:
|
||||||
|
node1, node2 = queue.popleft()
|
||||||
|
node1.val += node2.val
|
||||||
|
|
||||||
|
if node1.left and node2.left:
|
||||||
|
queue.append((node1.left, node2.left))
|
||||||
|
elif not node1.left:
|
||||||
|
node1.left = node2.left
|
||||||
|
|
||||||
|
if node1.right and node2.right:
|
||||||
|
queue.append((node1.right, node2.right))
|
||||||
|
elif not node1.right:
|
||||||
|
node1.right = node2.right
|
||||||
|
|
||||||
|
return root1
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
### Go
|
### Go
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
Reference in New Issue
Block a user