【题目】
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。
你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。
示例 1:
输入:
Tree 1 Tree 2
1 2
/ \ / \
3 2 1 3
/ \ \
5 4 7
输出:
合并后的树:
3
/
4 5
/ \ \
5 4 7
注意: 合并必须从两个树的根节点开始。
【代码】
【方法1】
class Solution:
def mergeTrees(self, root1: TreeNode, root2: TreeNode) -> TreeNode:
if not root1:
return root2
if not root2:
return root1
root1.val+=root2.val
root1.left= self.mergeTrees(root1.left,root2.left)
root1.right=self.mergeTrees(root1.right,root2.right)
return root1
【方法2】
class Solution:
def mergeTrees(self, root1: TreeNode, root2: TreeNode) -> TreeNode:
if not root1:
return root2
if not root2:
return root1
merged=TreeNode(root1.val+root2.val)
queue=[merged]
queue1=[root1]
queue2=[root2]
while queue1 and queue2:
node=queue.pop(0)
node1=queue1.pop(0)
node2=queue2.pop(0)
left1,right1=node1.left,node1.right
left2,right2=node2.left,node2.right
if left1 and left2:#两棵树的左节点都存在
node.left=TreeNode(left1.val+left2.val)
queue.append(node.left)
queue1.append(left1)
queue2.append(left2)
elif left1:
node.left=left1
elif left2:
node.left=left2
if right1 and right2:
node.right=TreeNode(right1.val+right2.val)
queue.append(node.right)
queue1.append(right1)
queue2.append(right2)
elif right1:
node.right=right1
elif right2:
node.right=right2
return merged