这题想要找到所有的从根节点到叶子节点顺出来的值的总和。此题采用传统的递归方法,但是有两个坑值得注意,首先我们在递归时应该保存的是字符串,而不是数值,因为如果是数值的话,需要知道树的高度,树的左右子树高度不同,对应着加的root.val的幂次就不同。但是当向上层返回高度时,就不知道返回哪个高度了,所以不可行。其次递归的最底层应该从 有数值的开始,而不是None开始。这是因为如果从None开始,相当于遍历了所有高度的子树。噗!写到这里,突然发现保存数值是可以的,因为题目想要只是最高的那个子树的值,所以如果是数值的话,保存那个最高的就好了。
代码如下:
# 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 sumNumbers(self, root):
"""
:type root: TreeNode
:rtype: int
"""
def temp(root):
if root == None:
return
if root.left == None and root.right == None:
return [str(root.val)]
left_value = temp(root.left)
right_value = temp(root.right)
temp_result = []
if left_value != None:
for tempp in left_value:
temp_result.append(str(root.val)+tempp)
if right_value !=None:
for tempp in right_value:
temp_result.append(str(root.val)+tempp)
return temp_result
result_list = temp(root)
result = 0
if result_list == None:
return result
for temp in result_list:
result += int(temp)
return result