數據結構中的Tree可以使用數組或者鏈表的形式來保存。對於樹的規模以及結構不會經常劇烈變動且很緊湊時可以使用數組保存。
對於完全二叉樹,或者滿二叉樹,可以使用數組方式按照樹從上到下從左到右逐層依序保存。
這種情況下對於節點的位置有如下規律:
假設某個節點所在位置索引為n。其左子節點的位置索引為2n+1,而其右子節點的位置索引為2n+2。
下圖是個示例:
下面是一個證明過程。
證明:
1:對於根節點:
其索引為0,按照數據保存規則,那么昨子節點索引為1,而右子節點為2。顯然滿足結論。
2:對於非根節點和非葉子節點:
假設該左子節點所在的索引為x,而該子節點x所在的層的第一個節點的索引為y,x與y之間的節點數為
所以:
x + = y
根據滿二叉樹的規律,我們假設x和y所在的層為i,那么:
y = power(2, i-1) + 1
同樣對於x與y之間的, 可以得到:
x -y = 2 * (n + 1 - (power(2, i-2) + 1))
注:n+1是因為n表示的是索引,而個數是索引+1
分解得到:
= 2n - power(2, i-1)
所以:
x - y = 2n - power(2, i-1)
進而
x - (power(2, i-1) + 1) = 2n - power(2, i-1)
簡化后得到
x = 2n + 1
所以其右子節點的索引為:
(x + 1) = 2n + 2