我想返回树中所有左叶的值之和,但是当我的“total”变量返回给调用者时,它的值似乎丢失了。我能知道解决这个问题的办法吗
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def sumOfLeftLeaves(self, root: TreeNode) -> int:
total = 0
if root is None:
return 0
if root.left:
sum1 = self.getLeftSum(root.left, total)
if root.right:
sum2 = self.getLeftSum(root.right, total)
return sum1 + sum2
def getLeftSum(self, cur_node, total):
if cur_node.left:
self.getLeftSum(cur_node.left, total)
if cur_node.left is None and cur_node.right is None:
total += cur_node.val
return total
我认为这是一对相互交织的递归函数:
一个是通用节点处理程序,另一个专门处理左手节点
这个答案假设您希望对发生在
left
分支中的每个val
求和。我们希望求和的数字如下所示(n)
-使用
TreeNode
类,我们构建my_tree
-递归是一种函数遗产,因此将其与函数风格结合使用会产生最好的结果。这意味着避免突变、变量重新分配和其他副作用。我们可以将
sum_left
作为一个普通函数写入TreeNode
-这是下面说同样事情的不那么冗长的方式-
现在让我们看看计算的
sum_left
另一种选择是使用mutual recursion-
在这里,处理根节点的方式会有所不同。直接在根上调用
sum_left
也将对根节点求和-如果要排除根节点,可以调用左节点上的
sum_left
和右分支上的sum_right
或者,看似违反直觉,只需在
my_tree
上调用sum_right
相关问题 更多 >
编程相关推荐