合并二叉树
leetcode 617 合并二叉树。本文使用两种方法递归、非递归来实现。
1.递归
同样,递归方法较简单,容易理解。但是此题使用递归方法会产生一颗新的树。
def mergeTrees(t1, t2):
if t1 is None: return t2
if t2 is None: return t1
root = TreeNode(t1.val + t2.val) #TreeNode构造树节点
root.left = mergeTrees(t1.left, t2.left) #递归合并左右子树
root.right = mergeTrees(t1.right, t2.right)
return root
2.非递归
非递归方法是把树t2挂到t1上去,其过程类似广度优先遍历。
def mergeTrees(t1, t2):
if t1 is None: return t2
if t2 is None: return t1
t1.val += t2.val #从根节点开始向下遍历节点,所以要先处理根节点
stack = [(t1, t2)]
while stack:
temp = []
node1, node2 = stack.pop()
if node2.left is None and node2.right is None:
continue
if node2.left:
if node1.left:
node1.left.val += node2.left.val
temp.appned((node1.left, node2.left))
else:
node1.left = node2.left
if node2.right:
if node1.right:
node1.right.val += node2.right.val
temp.appned((node1.right, node2.right))
else:
node1.right= node2.right
stack = temp
return t1