二叉树中的数字总和
Posted
技术标签:
【中文标题】二叉树中的数字总和【英文标题】:Sum of number in a binary tree 【发布时间】:2022-01-15 20:11:52 【问题描述】:我有一个可以包含两个自然数或两个以上列表的列表。这些列表中的每一个还包含两个整数或两个进一步的列表,依此类推。 即:[[4, 7], [[3, 5], [9, 1]]] 我需要使用递归来计算树中所有数字的总和并编写以下代码:
def getSum(tree):
sum = 0
for elemente in tree:
if type(elemente)==int:
sum += elemente
else:
sum = getSum(elemente)
return sum
代码不起作用,因为它总是返回 sum 为 12,所以我的问题是,我怎样才能使它工作但仍然使用递归?我没有正确识别基本情况吗?
【问题讨论】:
在return
之前不应该是sum = getSum(elemente)
吗?
你是对的。试过了,但它只总结了第一个元素,所以仍然不起作用。我会编辑它以防万一
如果您需要将其作为递归,则必须将 sum
保留在递归循环之外。否则,它将始终重置为0
。
它会随着每个元素重置,因此它只返回最后一个列表的总和。我怎样才能让它跟踪总和?
更正:“..否则,它将始终重置为上次计算的sum
”。
【参考方案1】:
你可以这样做:
def getSum(tree):
sum = 0
for elemente in tree:
if type(elemente)==int:
sum += elemente
else:
sum += getSum(elemente)
return sum
tree = [[4, 7], [[3, 5], [9, 1]]]
print(getSum(tree))
29
或者,您可以在递归循环之外跟踪sum
。
例如这样:
def getSum(tree, sum = None):
sum = sum or 0
for elemente in tree:
if type(elemente)==int:
sum += elemente
else:
sum = getSum(elemente, sum)
return sum
tree = [[4, 7], [[3, 5], [9, 1]]]
print(getSum(tree))
29
【讨论】:
那行得通。谢谢你。有没有办法在不向函数添加参数的情况下做到这一点? 是的,你是对的,对不起。还没有我的咖啡。查看更新的答案。以上是关于二叉树中的数字总和的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 给定二叉树,找到最大路径总和。路径可以在树中的任何节点处开始和结束。
LeetCode233. 数字1的个数(数位dp)/1583. 统计不开心的朋友(模拟)/112. 路径总和 / 230. 二叉搜索树中第K小的元素 /968. 监控二叉树(树形dp)