證明:(歸納法)
歸納基:i=1時,只有乙個結點,2i-1=20=1;
歸納假設:假設對所有的i命題成立;
歸納證明:二叉樹中每個結點最多有兩個子樹,則第i+1層的結點數為2*2i-2=2i-1.
證明:n=20+21+...+2h
-1=2h-1.(等比數列)
證明:設二叉樹的結點總數為n=n0+n1+n2;
二叉樹上的分支總數為b=n1+2n2;
又b=n-1;
故:n2=n0-1.
證明:設完全二叉樹的深度為k,則:2k-1
<=n<2k
即k-1<=log2n因為k只能取整數,所以k=[log2n]+1.
若i=1,則該結點是二叉樹的根,無雙親,否則,編號為[i/2]的結點為其雙親結點;
若2i>n,則該結點無左孩子結點,否則,編號為2i的結點為其左孩子結點;
若2i+1>n,則該結點無右孩子結點,否則,編號為2i+1的結點為其右孩子結點。
證明:設完全二叉樹中第i個結點的位置為第k層第j個結點,即i=2k-1-1+j;
則左孩子結點的索引為:l=2k-1+2(j-1)+1=2*(2k-1-1+j)=2*i;
左孩子結點的索引為:r=2k-1+2(j-1)+2=2*(2k-1-1+j)+1=2*i+1;
若乙個完全二叉樹的結點數目為n,求n0,n1,n2,數的高度h,左孩子結點數目nl和右孩子結點數目nr?
(n0為度為0的結點,n1為度為1的結點,n2為度為2的結點)
求解思路:
樹的高度h=[log2n]+1;
因為是完全二叉樹,所以1~h-1層全滿;
前h-1層的結點數目為nh-1=2h-1-1;
第h層的葉子結點數目為nc1=n-nh-1;
第h-1層的葉子結點數目為nc2=2h-2-ceil(nc1/2);(ceil為向上取整)
所以n0=nc1+nc2;
n2=n0-1;
n1=n-n0-n2;
左孩子結點數目nl=n2+n1;
右孩子結點數目nr=n2;
求二叉樹的葉子節點數目
1.設定乙個輔助計數變數作為葉子數目 2.分別遞迴訪問左右子樹,當結點的左右子樹都為空時,計數變數加1 3.得到計數變數的值即為葉子數目 typedef struct binarynodebinarynode param int leafnum 傳入計數變數的位址,通過指標修改變數的值 leafnu...
輸出二叉樹葉子節點 葉子節點數目 二叉樹高度
include include 輸出二叉樹葉子節點 葉子節點數目 二叉樹高度 include typedef int datatype int count 0 用於統計葉子節點的數目 typedef struct node bitnode,bittree void creatbitree bittr...
二叉樹 完全二叉樹的節點數
給定一棵完全二叉樹 最後一層所有節點都在最左側,其餘所有層節點數都為2 h 求其節點數。最簡單的方法就是遍歷一遍,把節點數加起來,但時間複雜度太高。以最左邊的路徑長作為二叉樹的高度,對於乙個節點,如果左子樹高度和右子樹高度一樣,說明左子樹為滿二叉樹,此時把其左子樹的節點數計算出來,加入總數,對右子樹...