完全二叉樹的數組表示,為什么節點i子節點坐標為2i+1,2i+2


看堆排序的時候看到堆這個結構,對這個結論有點好奇。
於是算了一下,其實結果還挺簡單的。

假設一個節點,他在數組下標是i
在二叉樹的第n層
且該節點在該層位於第x+1個(既在該層前方有x個節點)。

那么由於完全二叉樹前n層的總節點數是2^n - 1,在第n層的節點,前n-1層有2^(n-1) - 1個節點,加上他本層前面的x個節點,則:
i = 2^(n-1) - 1 + x

下面考慮子節點,i的子節點在第n+1層。
對於左子節點,令他在數組中下標為j。
左子節點在n+1層中,前面應該有2x個節點,(因為i在第n層前面有x個,每一個節點在下一層都會有2個節點)。
所以可以得到
j = (2^n - 1) + 2x = 2(2^(n-1) + x -1) + 1
= 2i + 1

這樣左節點下標j = 2i+1,右節點也就是2i+2了


補充:

其實想一下結果也很簡單,參考前面的計算,節點的下標就是節點前面的所有節點數。

節點數分為

  1. 前n-1層的節點數
  2. 本層前方的節點數。

對於子節點來說。

  1. 第一部分是前n層的節點數,恰好是父節點前n-1層節點數*2 + 1
  2. 第二部分子節點同層節點數,肯定是父節點同層前方節點數*2,因為是完全二叉樹。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM