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