多叉查詢樹和紅黑樹

2021-10-24 13:58:41 字數 3521 閱讀 8694

上圖是乙個二叉查詢樹

解決的方法可以使用多叉樹

2-3樹,2-3-4樹就是多叉樹,多叉樹通過重新組織節點,減少樹的高度,能對二叉樹進行優化。

除了23樹,還有234樹等,概念和23樹類似,也是一種b樹。 如圖:

除了23樹,還有234樹都是b樹

2-3樹是由二節點和三節點構成的樹。

b樹的階:節點的最多子節點個數。比如2-3樹的階是3,2-3-4樹的階是4

b-樹的搜尋,從根結點開始,對結點內的關鍵字(有序)序列進行二分查詢,如果命中則結束,否則進入查詢關鍵字所屬範圍的兒子結點;重複,直到所對應的兒子指標為空,或已經是葉子結點

關鍵字集合分布在整顆樹中, 即葉子節點和非葉子節點都存放資料.

搜尋有可能在非葉子結點結束

其搜尋效能等價於在關鍵字全集內做一次二分查詢

b樹定義了非葉子結點關鍵字個數至少為(2/3)m,即塊的最低使用率為2/3,而b+樹的塊的最低使用率為b+樹的1/2。

從第1個特點我們可以看出,b*樹分配新結點的概率比b+樹要低,空間使用率更高

2-3樹類似於一棵完美二叉樹(滿二叉樹),不過就是2-3樹允許乙個節點有三個孩子,正如其名字一樣。2-3樹為了維持這種完美的平衡性的願景。具備如下要求:

1 2節點有且只能有兩個孩子節點,並只能包含乙個資料項。

2 3節點必有三個孩子,並只能包含兩個資料項,從左至右依次遞增

3 插入節點時不能將該節點插入到乙個空節點上,新的節點只能通過**或者融合產生4 當2-3樹只有2節點的時候,其只能是一棵滿二叉樹(完美二叉樹)

我們通過**詳細理解一下以上三個性質。

2節點必有兩個孩子節點,並只能包含乙個資料項:如圖1所示,2節點只能有且只能有2個孩子節點,5節點和8節點。並且2直接只能包含乙個資料項即6;

3節點必有三個孩子,並只能包含兩個資料項,從左至右依次遞增:如圖2所示,5 < 6< 7< 8< 9;

插入節點時不能將該節點插入到乙個空節點上,新的節點只能通過**或者融合產生:關於這一條的解釋,我們下面通過2-3樹的插入操作好好體會。

返回目錄

本章節從2-3樹的插入理解「插入節點時不能將該節點插入到乙個空節點上,新的節點只能通過**或者融合產生」這句話。

在前文《二分搜尋樹》的分析中我們可知,當我們依次插入(1, 2, 3, 4, 5, 6, 7, 8 …)連續節點時,二分搜尋樹將退化為鍊錶。本章節我們看看2-3樹是如何保持平衡的。

如上圖3所示,我們一次插入(1,2,3,4,5)五個元素。

插入元素1,建立乙個2節點(元素為1)。

插入元素2,1,2元素融合暫時形成乙個3節點。為什麼2元素不能生成乙個節點作為1元素所在節點的右孩子?因為「插入節點時不能將該節點插入到乙個空節點上,新的節點只能通過**或者融合產生」

插入元素3,1,2,3元素暫時融合形成乙個4節點。

**,因為這是一棵2-3樹,不能存在4節點,所以暫時形成的4節點要進行**,將中間的元素作為根節點,左右兩個元素各為其左右孩子節點。這時可見形成了一棵滿二叉樹。

插入元素4,根據元素的大小關係其將會找到元素3所在的節點。因為新插入的節點不能插入到乙個空節點上,所以4元素將根據搜尋樹的性質找到最後乙個節點與其融合。即3,4元素將融合為乙個三節點。並且4元素要位於3元素的右側。

插入元素5,同插入元素4,元素5一路查詢到3,4元素所在的三節點,與其融合,暫時形成乙個4節點。

**,3,4,5元素所在的4節點同上面1,2,3元素形成的4節點一樣,進行**操作。根據大小關係,4元素將會作為根節點,3,5元素各為其左右孩子節點。

融合,前面的**操作已經導致該2-3樹不滿足其第四條性質「當2-3樹只有2節點的時候,其只能是一棵滿二叉樹(完美二叉樹)」,所以該2-3樹將要向上融合以滿足2-3樹的性質。我們只需要將4元素所在節點與其父節點即元素2所在的節點進行融合即可。這時,2,4元素就形成了乙個3節點。

繼續插入,6,7元素,最終形成的2-3樹如上圖4所示。可見,2-3樹維護平衡的機制是如此的神奇。整個過程我們是一次插入了(1,2,3,4,5,6,7)7個元素,如果是二分搜尋樹,該二分搜尋樹將會退化為乙個鍊錶,但是2-3樹卻神奇的生成了乙個滿二叉樹。

返回目錄

前面惡補了2-3樹的知識,接下來我們就進入正題。

紅黑樹的定義:

1 每個節點或者是紅色的,或者是黑色的;

2 根節點是黑色的;

3 每個葉子結點(紅黑樹中葉子節點為最後的空節點)是黑色的;

4 如果乙個節點是紅色的,那麼他的孩子都是黑色的;

5 從任意乙個節點到葉子節點經過的黑色節點是一樣的。

上面的5點定義是建立在紅黑樹是乙個二分搜尋樹的基礎上的。所以紅黑樹具備二分搜尋樹的所有性質。

看著定義是不是感覺無法理解紅黑樹?大部分的教材或者博文中對紅黑樹的講解都是生硬的根據這5條定義開始。真的是一頭霧水,不知所以然。接下來我們根據2-3樹的插入過程結合紅黑樹的性質,看看紅黑樹的旋轉和變色過程。

前面詳細介紹了2-3樹的**和融合過程,本小節,我們來看看2-3樹向紅黑樹轉換的過程。2-3樹有兩類節點,1節點和2節點。還有乙個臨時的節點3節點。下面看看2-3樹的這三種節點對應於紅黑樹的節點情況。

如上所示:

1節點:對應於紅黑樹的黑色節點。

2節點:對應於紅黑樹黑色的父節點和紅色的左孩子節點。

3節點:對應於紅色的父節點和黑色的左右孩子節點。這裡需要說一下,為什麼是紅色的父節點而不是黑色的呢?主要是因為2-3樹的3節點需要將**後的父節點進行向上融合,紅色的符合我們向紅黑樹中插入任何乙個節點預設都是紅色的實現方式(後面會介紹)。如果該父節點是紅黑樹的根節點的話,那他肯定需要變色,這一點就不屬於2-3樹向紅黑樹的變換規則了,而屬於紅黑樹的性質。

紅黑樹和多叉樹介紹和理解

多叉樹就是含有多個資料項,而且除了葉子節點其他的必須含有比資料項多乙個節點,每個節點的所有資料大小在對應資料項之間,這些規則都是為了保證樹的平衡,如圖 當遇到滿節點時需要 的思路大致是,將滿節點的資料項中間值取出來然後分兩半,分出的來的兩邊組成兩個子樹,然後接在取出來的資料項的兩邊,如果是根節點 取...

二叉查詢樹 紅黑樹

紅黑樹是一棵二叉查詢樹,它在每個結點上增加了乙個儲存位來表示結點的顏色,可以是red或black。通過對任何一條從根到葉子的簡單路徑上各個結點的顏色進行約束,紅黑樹確保沒有一條路徑會比其他路徑長出2倍,因而是近乎於平衡的。樹中每個結點包含5個屬性 color key left right和p。如果乙...

紅黑樹 二叉查詢樹

紅黑樹一種自平衡二叉查詢樹,是電腦科學中用到的一種資料結構,典型用途是實現關聯陣列。紅黑書很複雜,但是他的操作有良好的最壞情況執行時間,不管是查詢 插入和刪除,他的時間複雜度都是o logn 其中的n是樹中元素的數目。二叉查詢樹也稱二叉搜尋樹 有序二叉樹 ordered binary tree 排序...