流程实际如何在分支总和 python 代码中流动

How the process actually flows in branch sum python code

我真的很抱歉问了这个简单的问题。我目前正在解决算法并陷入分支总和。我搜索了很多,但没有人真正解释实际的代码,只是概念。如果有好心人给我解释一下。

class BinaryTree:
def __init__(self, value):
self.value = value
self.left = None
self.right = None

def branchSum(root):
    sums = []
    calculateBranchSum(root, 0, sums)
    return sums

def calculateBranchSums(node, runningSum, sums):
    if node is None:
        return
    newRunningSum = runningSum + node.value
    if node.left is None and node.right is None:
        sums.append(newRunningSum)
        return
    calculateBranchSums(node.left, newRunningSum, sums)
    calculateBranchSums(node.right, newRunningSum, sums)

我主要是疑惑节点怎么回去的?与第一个 node.left 一样,我们收到最终的总和。然后用node.right,newRunningSum是最后的和吗?

node 不会返回,你只是保存 运行 sum 的结果并将其传递给下一个节点,一旦你得到子节点(叶节点)你就追加 sum 和 return没什么,这个总和就是你的分支总和

     1
   /  \
  2    3
  /\   /\
 4  5  6 7

例如,在上面的树中,这就是您的代码流程

1 -> (1+2), (1+3) -> ((1+2+4), (1+2+5)),((1+3+6), (1+3+7)) 

并且它到达了子节点,因此总和将添加到结果数组中,即 sum_ (7,8,10, 11) 将是最终结果。

所以 运行 在这种情况下的顺序是:

 1  (node)
 1+2  (node.val+node.left.val)
 1+2+4 - > (node.val + node.left.val+ node.left.left.val) save this in array
 1+2+5 ->(node.val+node.left.val+node.left.right.val) save this in array
 1+3   (node.val+node.right.val)
 1+3+6 ->(node.val+node.right.val+node.right.left.val) save this in array
 1+3+7 -> (node.val+node.right.val+node.right.right.val) save this in arry