1. 程式人生 > ><資料結構> 樹Tree(簡單理論)

<資料結構> 樹Tree(簡單理論)

一.與樹相關的基本概念

1.樹是可以為空樹的 即根為空

2.樹的層數 即為當前樹的高度

3.結點的高度 從下往上看 看它下面有幾個人

結點的深度 從上往下看 看它上面有幾個人

4.度 即當前結點有幾個孩子 整棵樹的度就是最大的某一結點的度

5.中間結點 即為有孩子的結點

葉子結點 即為沒有孩子的結點

(一直糾結在一個點上 到底是節點 還是結點 查了一下 對於完全二叉樹來說 專業一點 是葉子結點 和非葉子節點 結點就是結束的點 節點還是有相交的線的部分)

二.二叉樹的分類

1.滿二叉樹:每層都是滿的的二叉樹

2.完全二叉樹:只有最後一層有空缺 並且是從右往左連續空缺

3.排序二叉樹BST:也稱為二叉搜尋樹

BST不允許出現數值相同的結點 每一個值都必須是唯一的

BST的查詢速度相對來說還是挺快挺好 但是當有一種特殊情況變成了連結串列的話

它也就失去了這種速度和效率 為了避免這種情況 就出現了平衡二叉樹

4.平衡二叉樹ABL:ABL是建立在BST的基礎之上的 除此以為

ABL樹中任意結點的左右子高度差不能超過1

三.二叉樹的性質

1.一個樹k層 那麼這個樹的節點數最多(即為滿二叉樹)為2^k-1

2.一個樹k層 那麼這個樹的葉子結點最多為2^(k-1)

3.設一棵樹的總結點個數為S 度為0的結點個數為n0 度為1的為n1 度為2的為n2

那麼S=n0+n1+n2(這個式子不難理解 一棵二叉樹總的結點個數 就是度分別為1,2,3的結點總數)

我們還可以得出S=0*n0+1*n1+2*n2+1(0*n0表示被n0指向的 1*n1即為被n1指向的 n2同理 最後要加1是因為根沒有人指向它 所以要加1)

最後上面兩個式子聯立就可以得出這樣一條結論:n0=n2+1

即度為0的結點個數比度為2的結點個數多一個

注:在完全二叉樹中 度為1的結點最多有一個 最少有0個

(PS:以下第4點第5點僅僅適用於完全二叉樹

4.n個結點的完全二叉樹 它的高度k=⌊log2n⌋+1(向下取整)

5.把一顆完全二叉樹 按照從上到下 從左到右的順序開始編號:

從1開始:編號為i的結點 左孩子編號為2*i 右孩子的編號為2*i+1

證明左右孩子是當前結點的孩子條件是<=n

父親結點的範圍是:1~n/2(n為總結點個數)

從0開始:編號為i的結點 左孩子編號為2*i+1 右孩子的編號為2*i+2

證明左右孩子是當前結點的孩子條件是<=n-1

父親結點的範圍是:0~n/2-1(n為總結點個數)