Leetcode 617. 合并二叉树----python

给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。
你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。
示例 1:
在这里插入图片描述
解题思路
自顶向下进行合并,分情况进行讨论:

  • (1)当tree1,tree2都为空时,返回None
  • (2)当tree1为空时,返回tree2
  • (3)当tree2为空时,返回tree1
  • (4)当tree1,tree2都不为空时,将两树的值相加,同理:两树的左子树都不为空时,合并为新树的左子树,两树的右子树都不为空时,合并为新树的右子树。

递归完成算法

代码实现

    def mergeTrees(self, t1: TreeNode, t2: TreeNode) -> TreeNode:
        if(t1 == None and t2 == None):
            return None
        if(t2 == None):
            return t1
        elif(t1 == None):
            return t2
        else:
            t1.val = t1.val + t2.val
            t1.left = self.mergeTrees(t1.left,t2.left)
            t1.right = self.mergeTrees(t1.right,t2.right)
            return t1

代码测试

# Definition for a binary tree node.
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution:

    def __init__(self):
        self.res = list()

    def mergeTrees(self, t1: TreeNode, t2: TreeNode) -> TreeNode:
        if(t1 == None and t2 == None):
            return None
        if(t2 == None):
            return t1
        elif(t1 == None):
            return t2
        else:
            t1.val = t1.val + t2.val
            t1.left = self.mergeTrees(t1.left,t2.left)
            t1.right = self.mergeTrees(t1.right,t2.right)
            return t1


    # def mergeTrees(self, t1: TreeNode, t2: TreeNode) -> TreeNode:
    #     if t1 and t2 :
    #         t1.val += t2.val
    #         t1.left = self.mergeTrees(t1.left, t2.left)
    #         t1.right = self.mergeTrees(t1.right, t2.right)
    #         return t1
    #     return t1 or t2

    def inorderTraversal(self, root: TreeNode):
        if root:
            self.t(root)
        return self.res

    def t(self, root):
        if root.left != None:
            self.t(root.left)
        self.res.append(root.val)
        if root.right != None:
            self.t(root.right)


root1 = TreeNode(3)
n1 = TreeNode(2)
root1.left = n1
n2 = TreeNode(4)
root1.right = n2
n1.left = TreeNode(0)
n2.right = TreeNode(8)


n1 = TreeNode(4)
n2 = TreeNode(2)
n3 = TreeNode(7)
n4 = TreeNode(1)
n5 = TreeNode(3)
n1.left = n2
n1.right = n3
n2.left = n4
n2.right = n5

s = Solution()
result =s.mergeTrees(root1,n1)
print(result)

猜你喜欢

转载自blog.csdn.net/u013075024/article/details/91817503