n o d e N u m [ r o o t ] = s u m ( n o d e N u m [ c h i l d ] ) + 1 nodeNum[root] = sum(nodeNum[child])+1 nodeNum[root]=sum(nodeNum[child])+1
d i s t S u m [ r o o t ] = s u m ( n o d e N u m [ c h i l d ] + d i s t S u m [ c h i l d ] ) distSum[root] = sum(nodeNum[child] + distSum[child]) distSum[root]=sum(nodeNum[child]+distSum[child])
從上往下遞歸,到達底部就遇到「結果已知的 base case」,随着遞歸的出棧,結果不斷向上傳回,最後求出目前子樹的 distSum。
是以,我們找到distSum[i]與distSum[root]之間的遞推關系: d i s t S u m [ i ] = d i s t S u m [ r o o t ] − n o d e N u m [ i ] + ( N − n o d e N u m [ i ] ) distSum[i] = distSum[root] - nodeNum[i] + (N - nodeNum[i]) distSum[i]=distSum[root]−nodeNum[i]+(N−nodeNum[i]) d i s t S u m [ i ] = d i s t S u m [ r o o t ] − n o d e N u m [ i ] + ( N − n o d e N u m [ i ] ) distSum[i]=distSum[root]−nodeNum[i]+(N−nodeNum[i]) distSum[i]=distSum[root]−nodeNum[i]+(N−nodeNum[i])