1. 程式人生 > >基於樹的查詢(二叉排序樹、平衡二叉樹、B樹、B+樹、伸展樹和紅黑樹)

基於樹的查詢(二叉排序樹、平衡二叉樹、B樹、B+樹、伸展樹和紅黑樹)

本文主要介紹幾種比較重要的樹形結構:
① 二叉排序樹 ② 平衡二叉樹 ③ B樹 ④ B+樹
⑤ 伸展樹 ⑥ 紅黑樹

分為三個問題來描述每種樹:
① 是什麼?主要應用? ② 有什麼特點(性質)? ③ 基於它的操作?

Ⅰ 二叉排序樹(BST):
二叉排序樹又稱為二叉查詢樹,是一種高效的資料結構。是一種特殊的二叉樹。
這裡寫圖片描述
特點(性質):

這裡寫圖片描述

注意:要先判斷題目給定的二叉排序樹是否為空樹!

二叉排序樹採用二叉連結串列作為儲存結構:
這裡寫圖片描述
二叉連結串列分為3個域:左孩子、右孩子和資料域。

基於二叉排序樹的演算法:
這裡寫圖片描述

詳細解釋以及需要注意的地方:

關於比較複雜的刪除的最後一種情況,也就是待刪結點既有左子樹又有右子樹的情況:
(1)中序遍歷,找出待刪結點的直接前驅和直接後繼結點。
(2)可以用前驅結點和後繼結點中的任何一個來替換待刪結點。
(3)過程是先將待刪結點換成前驅(後繼)結點,再將原來前驅(後繼)結點刪除,刪除的過程轉化成了較簡單的前兩種情況。

效能分析:動態查詢效率高
這裡寫圖片描述

Ⅱ 平衡二叉樹 (AVL):
由於二叉排序樹的結點分佈不均衡,導致會出現最壞時間複雜度,所以經過改進產生平衡二叉樹。平衡二叉樹不受輸入序列和插入結點的影響,始終保持平衡狀態。

平衡因子:BF( Node) 表示結點的平衡因子
BF( Node) = Node的右子樹高度 - Node的左子樹高度 。
這裡寫圖片描述

這裡寫圖片描述
如圖,是一個AVL的例子,其中圓圈裡邊的數字代表BF,外邊的數字代表Node真正的值。有n個結點,樹的高度為這裡寫圖片描述,時間複雜度為這裡寫圖片描述

當經過插入或者刪除操作破壞了平衡二叉樹的平衡之後,需要通過一系列操作來調整使其依舊保持平衡。

這裡寫圖片描述

1.LL型詳解:
這裡寫圖片描述
你
這裡寫圖片描述

同上,對於RL型別,採用相同的分析方法,不同之處在於RL型別先順時針旋轉,再逆時針旋轉。

在從0建立平衡二叉樹的過程中,基於插入演算法,判斷是哪種插入型別的時候是根據 | BF(Node) |=2的結點來判斷的。

平衡二叉樹的刪除比較麻煩,待更。

Ⅲ B樹
B樹不是二叉樹而是樹,是一種多路平衡查詢樹,即樹的分支多於二叉且所有葉子結點在同一層上。B樹在檔案系統和資料庫系統中使用較多,適用於組織動態的索引結構。
用m來表示B樹的階,即所有結點中擁有孩子最多的那個結點的孩子總數。
這裡寫圖片描述


以上是一個B樹的例子,在上圖中,藍色框體中標記的數字表示含有元素的個數。
這裡寫圖片描述
綜上可得:整個B樹可以看成一個遞增序列,結點左邊的數一定小於結點本身,結點右邊的數一定大於結點本身。

這裡寫圖片描述

關於key在葉子結點,直接刪的過程,又分為三種情況。
這裡寫圖片描述
旋轉指的是,將待刪的結點刪除後,取右兄弟結點最小值上移,將原父結點放在已刪結點的位置,即逆時針旋轉。或者將左兄弟節點的最大值上移,將原父結點放在已刪結點的位置,即順時針旋轉。

Ⅳ B+樹
B樹的變種,應用在多種檔案系統中。
這裡寫圖片描述

上圖表示簡單的B+樹,從圖中可以看出,所有的關鍵字都會出現在葉子結點中,上層關鍵字是下層最大值的複寫(也可以是最小值的複寫)。
查詢的方法:
(1)可以從最小關鍵字起按順序查詢
(2)可以從根結點開始隨機查詢

關於伸展樹、紅黑樹、以及平衡二叉樹的刪除、待更!