LeetCode刷题之路:617. 合并二叉树
程序员文章站
2022-05-20 10:53:50
...
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。
你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。
示例 1:
输入:
Tree 1 Tree 2
1 2
/ \ / \
3 2 1 3
/ \ \
5 4 7
输出:
合并后的树:
3
/ \
4 5
/ \ \
5 4 7
注意: 合并必须从两个树的根节点开始。
#最直观的思路
这个题利用最大堆来进行求解
# 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:
# if not root1 and root2:
# return root2
# if not root2 and root1:
# return root1
# if not root1 and not root2:
# return root1
# queue = [root1, root2]
# while queue:
# node1 = queue.pop(0)
# node2 = queue.pop(0)
# node1.val += node2.val
# if node1.left and node2.left:
# queue.append(node1.left)
# queue.append(node2.left)
# elif not node1.left:
# node1.left = node2.left
# if node1.right and node2.right:
# queue.append(node1.right)
# queue.append(node2.right)
# elif not node1.right:
# node1.right = node2.right
# return root1
def merge(root1, root2):
if not root1:
return root2
if not root2:
return root1
node = TreeNode()
node.val = root1.val + root2.val
node.left = merge(root1.left, root2.left)
node.right = merge(root1.right, root2.right)
print(node)
return node
return merge(root1, root2)