欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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)