Update 0617.合并二叉树.md

迭代法: 逻辑没有改, 只是改变顺序使之与c++代码逻辑一致.
This commit is contained in:
Kelvin
2021-07-31 23:10:30 -04:00
parent 932d27754c
commit 84a12f32de

View File

@ -340,31 +340,38 @@ class Solution:
**迭代法** **迭代法**
```python ```python
# 迭代法-覆盖原来的树
class Solution: class Solution:
def mergeTrees(self, root1: TreeNode, root2: TreeNode) -> TreeNode: def mergeTrees(self, root1: TreeNode, root2: TreeNode) -> TreeNode:
if not root1: return root2 if not root1:
if not root2: return root1 return root2
# 迭代,将树2覆盖到树1 if not root2:
queue1 = [root1] return 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.right: # 同理,处理右儿子 queue = deque()
root1.right = root2.right queue.append(root1)
elif root1.right and root2.right: queue.append(root2)
queue1.append(root1.right)
queue2.append(root2.right) while queue:
return root 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 Go