mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-11 21:10:58 +08:00
Update 0617.合并二叉树.md
迭代法: 逻辑没有改, 只是改变顺序使之与c++代码逻辑一致.
This commit is contained in:
@ -340,31 +340,38 @@ class Solution:
|
||||
|
||||
**迭代法**
|
||||
```python
|
||||
# 迭代法-覆盖原来的树
|
||||
class Solution:
|
||||
def mergeTrees(self, root1: TreeNode, root2: TreeNode) -> TreeNode:
|
||||
if not root1: return root2
|
||||
if not root2: return root1
|
||||
# 迭代,将树2覆盖到树1
|
||||
queue1 = [root1]
|
||||
queue2 = [root2]
|
||||
root = root1
|
||||
while queue1 and queue2:
|
||||
root1 = queue1.pop(0)
|
||||
root2 = queue2.pop(0)
|
||||
root1.val += root2.val
|
||||
if not root1.left: # 如果树1左儿子不存在,则覆盖后树1的左儿子为树2的左儿子
|
||||
root1.left = root2.left
|
||||
elif root1.left and root2.left:
|
||||
queue1.append(root1.left)
|
||||
queue2.append(root2.left)
|
||||
if not root1:
|
||||
return root2
|
||||
if not root2:
|
||||
return root1
|
||||
|
||||
if not root1.right: # 同理,处理右儿子
|
||||
root1.right = root2.right
|
||||
elif root1.right and root2.right:
|
||||
queue1.append(root1.right)
|
||||
queue2.append(root2.right)
|
||||
return root
|
||||
queue = deque()
|
||||
queue.append(root1)
|
||||
queue.append(root2)
|
||||
|
||||
while queue:
|
||||
node1 = queue.popleft()
|
||||
node2 = queue.popleft()
|
||||
# 更新queue
|
||||
# 只有两个节点都有左节点时, 再往queue里面放.
|
||||
if node1.left and node2.left:
|
||||
queue.append(node1.left)
|
||||
queue.append(node2.left)
|
||||
# 只有两个节点都有右节点时, 再往queue里面放.
|
||||
if node1.right and node2.right:
|
||||
queue.append(node1.right)
|
||||
queue.append(node2.right)
|
||||
|
||||
# 更新当前节点. 同时改变当前节点的左右孩子.
|
||||
node1.val += node2.val
|
||||
if not node1.left and node2.left:
|
||||
node1.left = node2.left
|
||||
if not node1.right and node2.right:
|
||||
node1.right = node2.right
|
||||
|
||||
return root1
|
||||
```
|
||||
|
||||
Go:
|
||||
|
Reference in New Issue
Block a user