二叉树中的数字总和

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 给定二叉树,找到最大路径总和。路径可以在树中的任何节点处开始和结束。

二叉树中的最大路径和

124. 二叉树中的最大路径和

LeetCode233. 数字1的个数(数位dp)/1583. 统计不开心的朋友(模拟)/112. 路径总和 / 230. 二叉搜索树中第K小的元素 /968. 监控二叉树(树形dp)

二叉树中的最大和路径