1. 程式人生 > >資料結構——樹—— 二叉樹及儲存結構

資料結構——樹—— 二叉樹及儲存結構

在電腦科學中,二叉樹是每個結點最多有兩個子樹的樹結構。通常子樹被稱作“左子樹”(left subtree)和“右子樹”(right subtree)。二叉樹常被用於實現二叉查詢樹和二叉堆。
一棵深度為k,且有2^k-1個節點的二叉樹,稱為滿二叉樹。這種樹的特點是每一層上的節點數都是最大節點數。而在一棵二叉樹中,除最後一層外,若其餘層都是滿的,並且最後一層或者是滿的,或者是在右邊缺少連續若干節點,則此二叉樹為完全二叉樹。具有n個節點的完全二叉樹的深度為floor(log2n)+1。深度為k的完全二叉樹,至少有 2^k-1個葉子節點,至多有 2^k-1個節點。
在這裡插入圖片描述在這裡插入圖片描述

二叉樹重要性質

(1) 在非空二叉樹中,第i層的結點總數不超過2^(i-1), i>=1;
(2) 深度為h的二叉樹最多有2^h -1個結點(h>=1),最少有h個結點;
(3) 對於任意一棵二叉樹,如果其葉結點數為N0,而度數為2的結點總數為N2,則N0=N2+1;
(4) 具有n個結點的完全二叉樹的深度為[log2^n]+1
(注:[ ]表示向下取整)
(5)有N個結點的完全二叉樹各結點如果用順序方式儲存,則結點之間有如下關係:
若I為結點編號則 如果I>1,則其父結點的編號為I/2;
如果2I<=N,則其左孩子(即左子樹的根結點)的編號為2

I;若2I>N,則無左孩子;
如果2
I+1<=N,則其右孩子的結點編號為2I+1;若2I+1>N,則無右孩子。
(6)給定N個節點,能構成h(N)種不同的二叉樹。
h(N)為卡特蘭數的第N項。h(n)=C(2*n,n)/(n+1)。
(7)設有i個枝點,I為所有枝點的道路長度總和,J為葉的道路長度總和J=I+2i

二叉樹的抽象資料型別定義
型別名稱:二叉樹 資料物件集:一個有窮的結點集合。 若不為空,則由根結點和其左、右二叉子樹組成。
重要操作有: 1、Boolean IsEmpty( BinTree BT ): 判別BT是否為空; 2、void Traversal( BinTree BT ):遍歷,按某順序訪問每個結點; 3、BinTree CreatBinTree( ):建立一個二叉樹。

    typedef struct TNode *Position;
    typedef Position BinTree; /* 二叉樹型別 */
    struct TNode{ /* 樹結點定義 */
        ElementType Data; /* 結點資料 */
        BinTree Left;     /* 指向左子樹 */
        BinTree Right;    /* 指向右子樹 */
    };

在這裡插入圖片描述

二叉樹的儲存結構

在這裡插入圖片描述在這裡插入圖片描述