【Leetcode】617. Merge Two Binary Trees 解题报告

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dpengwang/article/details/88218343

在这里插入图片描述
合并两棵树

思路

合并两棵树,我们将第二棵树合并到第一棵树上即可。
因为涉及到父子关系,所以我的处理要在父节点上进行,然后指定他的左子树和右子树分别为什么,递归的方法很好写。非递归的形式,要分情况讨论,拿生成左子树为例:

  • 如果tree1和tree2都有左子树,那么将两棵树的左右子树都压栈,弹出的时候将tree2左子树的值加到tree1的左子树即可。
  • 如果tree1.left == None and tree2.left != None, 让tree1.left = tree2.left即可
  • 都为None的时候则不需要再处理

方法1 递归

class Solution:
    def mergeTrees(self, t1, t2):
        """
        :type t1: TreeNode
        :type t2: TreeNode
        :rtype: TreeNode
        """
        if not t1 and not t2:
            return None
        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
        else:
            return t1 or t2

方法2 非递归

class Solution2:
    def mergeTrees(self, t1, t2):
        """
        :type t1: TreeNode
        :type t2: TreeNode
        :rtype: TreeNode
        """
        if t1 == None:
            return t2
        if t2 == None:
            return t1
        stack = [[t1, t2]]
        while(len(stack)):
            tree1, tree2 = stack.pop()
            tree1.val += tree2.val
            if tree1.left and tree2.left:
                stack.append([tree1.left, tree2.left])
            if tree1.right and tree2.right:
                stack.append([tree1.right, tree2.right])
            if tree1.left == None and tree2.left != None:
                tree1.left = tree2.left
            if tree1.right == None and tree2.right != None:
                tree1.right = tree2.right
        return t1

猜你喜欢

转载自blog.csdn.net/dpengwang/article/details/88218343