原题是:
Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not.
You need to merge them into a new binary tree. The merge rule is that if two nodes overlap, then sum node values up as the new value of the merged node. Otherwise, the NOT null node will be used as the node of new tree.
Example 1:
Input:
Tree 1 Tree 2
1 2
/ \ / \
3 2 1 3
/ \ \
5 4 7
Output:
Merged tree:
3
/ \
4 5
/ \ \
5 4 7
Note: The merging process must start from the root nodes of both trees.
代码是:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def mergeTrees(self, t1, t2):
"""
:type t1: TreeNode
:type t2: TreeNode
:rtype: TreeNode
"""
a = 0
b = 0
t = TreeNode(0)
if t1 == None and t2 == None:
return None
elif t1 or t2 :
a = t1.val if t1!= None else 0
b = t2.val if t2!= None else 0
t.val = a + b
t.left = self.mergeTrees(t1.left,t2.left) if t1 and t2 else ( self.mergeTrees(None,t2.left)if t1 == None else self.mergeTrees(t1.left,None) )
t.right = self.mergeTrees(t1.right,t2.right) if t1 and t2 else ( self.mergeTrees(None,t2.right)if t1 == None else self.mergeTrees(t1.right,None) )
return t
总结:
这个题的逻辑分支,我用到了Python里的三目运算符,不在是 ?:
而是if else:
a = 8 if a>100 else 9
所有大于100的数都取8,否则是9.
对于要merge的节点,先确定它的val。再去找它的left, right 节点。
网友评论