滿二叉樹各種節點數目的計算

2022-09-05 20:42:14 字數 1042 閱讀 3398

證明:(歸納法)

歸納基: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 求其節點數。最簡單的方法就是遍歷一遍,把節點數加起來,但時間複雜度太高。以最左邊的路徑長作為二叉樹的高度,對於乙個節點,如果左子樹高度和右子樹高度一樣,說明左子樹為滿二叉樹,此時把其左子樹的節點數計算出來,加入總數,對右子樹...