我真的很抱歉問這個簡單的問題。我目前正在解決演算法并陷入分支總和。我搜索了很多,但沒有人真正解釋實際代碼,只是概念。如果這里有人愿意向我解釋一下。
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 是最后一個總和?
uj5u.com熱心網友回復:
節點不會回傳,您只是保存運行 sum 的結果并將其傳遞給下一個節點,一旦您獲得子節點(葉節點),您將追加 sum 并且不回傳任何內容,而該 sum 就是您的分支 sum
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/395973.html
下一篇:從中心以螺旋形式填充矩陣
