版权声明:本文为博主原创文章,未经博主允许不得转载。 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