判斷
完全二叉樹:除最後一層外,每一層上的節點數均達到最大值;在最後一層上隻缺少右邊的若幹結點。
定義
完全二叉樹(Complete Binary Tree)
若設二叉樹的深度為h,除第h層外,其它各層(1~h-1)的結點數都達到最大個數,第h層所有的結點都連續集中在最左邊,這就是完全二叉樹。
完全二叉樹是由滿二叉樹而引出來的。對于深度為K的,有N個結點的二叉樹,當且僅當其每一個結點都與深度為K的滿二叉樹中編号從1至n的結點一一對應時稱之為完全二叉樹。
若一棵二叉樹至多隻有最下面的兩層上的結點的度數可以小于2,并且最下層上的結點都集中在該層最左邊的若幹位置上,則此二叉樹成為完全二叉樹。
特點
葉子結點隻可能在最大的兩層上出現,對任意結點,若其右分支下的子孫最大層次為L,則其左分支下的子孫的最大層次必為L或L+1;
出于簡便起見,完全二叉樹通常采用數組而不是鍊表存儲,其存儲結構如下:
var tree:array[1..n]of longint;{n:integer;n>=1}
對于tree有如下特點:
(1)若i為奇數且i>1,那麼tree的左兄弟為tree[i-1];
(2)若i為偶數且i
(3)若i>1,tree的雙親為tree[i div2];
(4)若2*i<=n,那麼tree的左孩子為tree[2*i];若2*i+1<=n,那麼tree的右孩子為tree[2*i+1];
(5)若i>n div 2,那麼tree[i]為 葉子結點(對應于(3))
(6)若i<(n-1)div2.那麼tree[i]必有兩個孩子(對應于(4))
(7)滿二叉樹一定是完全二叉樹,完全二叉樹不一定是滿二叉樹
完全二叉樹第i層至多有2^(i-1)個 節點,共i層的完全二叉樹最多有2^i-1個節點。
算法
完全二叉樹葉子結點的算法
如果一棵具有n個結點的深度為k的二叉樹,它的每一個結點都與深度為k的滿二叉樹中編号為1~n的結點一一對應,這棵二叉樹稱為完全二叉樹。
可以根據公式進行推導,假設n0是度為0的結點總數(即葉子結點數),n1是度為1的結點總數,n2是度為2的結點總數,由二叉樹的性質可知:n0=n2+1,則n=n0+n1+n2(其中n為完全二叉樹的結點總數),由上述公式把n2消去得:n=2n0+n1-1,由于完全二叉樹中度為1的結點數隻有兩種可能0或1,由此得到n0=(n+1)/2或n0=n/2。總結起來,就是n0=[n/2],其中[]表示上取整。可根據完全二叉樹的結點總數計算出葉子結點數。



















