首先,你應該找到的位置,你可以通過計算左和權利開支,以達到特定的節點數量做到這一點:
1 : l = 0, r = 0
/\
/ \
l=1,r=0 2 3 : l = 0, r = 1.
/\ /\
... 4...5 6...7 ....
只要你可以穿越你的二叉樹最後計算出LorR = NumberOfLeft - NumberOfRights
每個節點,然後組這個數字(通過其LorR
值)一起,發現各組總和(它們打印從最積極的到的LorR
最負值) 。
更新:這對於高度超過兩倍的樹不應答,我們可以在算法中稍加修改來解決此問題。
我們可以看到樹金字塔,金字塔的每個頂點的長度爲1,以後每一個分支其餘分支的一部分,等於什麼最新舉措過去了,我們對此進行了畫面的高度爲3的樹:
1
/\
/ \
/ \
2 3 upto this we used 1/2 size of pyramid
/\ /\
/ \ / \
4 5 6 7 upto this we used 1/2 + 1/4 part of pyramid
/\/\/\/\
5 9 1 3 6 7 5 5 upto this we used 1/2 + 1/4 + 1/4 part of pyramid
這意味着在每一步中我們都會根據它們的高度來計算左值(實際上每次乘以1/2的倍數都會被添加到左值,除了上次,等於h-1值)。
因此,對於這種情況我們有:1根在組0中,3在葉中是組-1/2 + 1/4 + 1/4 = 0,葉在組6中是1/2 - 1/4 - 1/4 = 0
葉中的1在-1/2 + 1/4 - 1/4 = -1/2等等。
爲防止將1 /(2^x)舍入爲零或其他問題,我們可以將我們的因子(1/2,1/4,1/8,...)乘以2 h-1 。事實上,在我寫的第一個案例中,我們可以說因子乘以2 2-1。在僞碼
你如何計算總和?它的垂直如何? – 2012-03-10 13:03:37
我編輯了這個問題。請找到垂直線。 – 2012-03-10 13:14:47
我不清楚垂直線是如何定義的。你能用一個更高層次的樹來展示它嗎? – svick 2012-03-10 13:37:28