二叉樹父子節點下標位置關係證明

楊槐發表於2018-11-27

最近在看一個堆排序的時候,發現其中一行程式碼涉及到二叉樹的位置關係

一個節點的左節點是其父節點下標的2k+1,右節點是其父節點下標的2K+2。

由於很久沒複習過資料結構,突然很好奇這個結論的證明(雖然以前學習時已經證明過),然後寫一份部落格再加深一下。畢竟這個技術不用就很容易忘記。

大家都知道二叉樹一個節點有2個子節點,右節點和左節點。因此,可以將二叉樹每一層的數量看做一個公比為2的等比數列。如 第一層 也就是根節點的數量是2^0=1,第二層2^1=2,第三層2^2=4,第k層2^k。。。。

等比數列的求和公式為

因此第k層的最後一個節點下標為:2^k-1 第一個節點為2^(k-1)

因此迴歸正文:

假設父節點為第K層第M個節點,則其下標為2^(k-1)+m;

其子節點就是第K+1層第2^(k)+(M-1)*2+1以及第2^(k)+(M-1)*2+2個

子左節點-父節點=2^(k)+(M-1)*2+1-2^(k-1)-M=2^(k-1)+M-1.而2^(k-1)+m為父節點下標,也就是父節點下標+1

同理 子右節點-父節點=父節點下標+2

證明完成

二叉樹的子節點的下標是父節點下標的2倍+1 以及父節點下標的2倍+2

相關文章