最近在看一個堆排序的時候,發現其中一行代碼涉及到二叉樹的位置關係數據結構
一個節點的左節點是其父節點下標的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