紅黑二叉查詢樹

2021-08-28 05:12:58 字數 3176 閱讀 8064

三、各種查詢符號表的效能比較

之前所述的

2-3樹 的插入演算法並不難理解,我們要利用名為紅黑二叉查詢樹的簡單資料結構來表達並實現它。最後的**量並不大。

紅黑樹背後的思想是用標準的二叉查詢樹(完全由2-結點構成)和一些額外的資訊(替換3-結點)來表示 2-3樹

對於任意的2-3樹,只要對結點進行轉換,我們都可以立即派生出一顆對應的二叉查詢樹。我們將用這種方式表示2-3樹的二叉查詢樹稱為紅黑樹

我們將樹中的鏈結分為兩種型別:

紅鏈結將兩個2-結點連線起來構成乙個3-結點

黑鏈結則是2-3樹中的普通鏈結。

確切地說,我們將 3-結點 表示為由一條 左斜 的紅色鏈結相連的兩個2-結點

紅黑樹的另一種定義是滿足下列條件的二叉查詢樹:

⑴ 紅鏈結均為左鏈結

⑵ 沒有任何乙個結點同時和兩條紅鏈結相連。

⑶ 該樹是完美黑色平衡的,即任意空鏈結到根結點的路徑上的黑鏈結數量相同。

如果我們將一顆紅黑樹中的紅鏈結畫平,那麼所有的空鏈結到根結點的距離都將是相同的。如果我們將由紅鏈結相連的結點合併,得到的就是一顆2-3樹。

無論我們用何種方式去定義它們,紅黑樹都既是二叉查詢樹,也是2-3樹。紅黑樹與2-3樹在本質上是相同的,只是它們對3-結點的表示不同。

優點:

2-3樹的深度很小,平衡性好,效率高,但是其有兩種不同的結點,實際**實現比較複雜。

而紅黑樹用紅鏈結表示2-3樹中另類的3-結點,統一了樹中的結點型別,使**實現簡單化,無需修改就可以直接使用標準二叉查詢樹的get()方法,又不破壞其高效性。

因此,如果我們能夠在保持一一對應關係的基礎上實現2-3樹的插入演算法,那麼我們就能夠將兩個演算法的優點結合起來:二叉查詢樹簡潔的查詢方法 和2-3樹高效的平衡插入演算法、

2.1 顏色表示

每個結點都只會有一條指向自己的鏈結(從它的父結點指向它),我們將鏈結的顏色儲存在表示結點的node資料型別的布林變數color中(若指向它的鏈結是紅色的,那麼該變數為true,黑色則為false)。

當我們提到乙個結點顏色時,我們指的是指向該結點的鏈結的顏色

2.2 左旋轉、右旋轉

在我們實現的某些操作中可能會出現紅色右鏈結或者兩條連續的紅鏈結,但在操作完成前這些情況都會被小心地旋轉並修復。

旋轉操作可以保證紅黑樹的兩個重要性質:有序性完美平衡性

旋轉操作會改變紅鏈結的指向。紅色的右鏈結被轉換為左鏈結,這個操作叫做左旋轉

1) 向2-結點中插入新鍵

– 如果新鍵 < 老鍵,新增乙個紅色結點即可。新的紅黑樹與單個3-結點完全等價

– 如果新鍵 > 老鍵,新增的紅色結點會產生一條紅色右鏈結,需要使用右旋轉修正

2) 向3-結點中插入新鍵

– 如果新鍵介於樹中的兩個鍵之間:下層的紅鏈結左旋轉,即可得到第一種情況 (兩條連續的紅色左鏈結)

2.3 顏色轉換

轉換乙個結點的兩個紅色子節點的顏色,同時將父節點的顏色由黑變紅

2.4 總結

只要謹慎地使用左旋轉右旋轉顏色轉換這三種簡單的操作,我們就能保證插入操作後紅黑樹和2-3樹的一一對應關係。

在沿著插入點到根節點的路徑向上移動時,在所經過的每個節點中完成以下操作:

– 如果右子節點是紅色的,而左子節點是黑色的:進行左旋轉

– 如果左右子節點均為紅色:進行顏色轉換

舉例:一棵紅黑樹的構造全過程

另一種紅黑樹插入操作的思考方式:

向紅黑樹中插入操作時,先將其轉換成2-3樹進行插入。然後再將2-3樹的結果轉換成等效的紅黑樹(將3-結點轉化為紅結點)即可。可參考史上最簡單清晰的紅黑樹講解

所有基於紅黑樹的符號表實現都能保證操作的執行時間為對數級別。

紅黑二叉查詢樹

擷取自 演算法 第四版 紅黑二叉查詢樹背後的基本思想是用標準二叉查詢樹 完全 由2 節點構成 和 一些額外的資訊 替換 3 節點 來表示 2 3樹。紅黑樹中的鏈結分為兩種 1 將兩個2 節點連線起來 構成3 節點的紅鏈結 2 2 3樹中的普通鏈結為黑鏈結 將兩個 2節點用左斜的紅色鏈結鏈起來可表示3...

紅黑二叉查詢樹

紅黑二叉查詢樹背後的基本思想是用標準的二叉查詢樹 完全由2 結點構成 和一些額外的資訊 替換3 結點 來表示2 3樹。我們將樹中的鏈結分為兩種型別 紅鏈結將兩個2 結點鏈結起來構成乙個3 結點,黑鏈結則是2 3樹中的普通鏈結。確切的說,我們將3 結點表示為一條左斜的紅色鏈結 兩個2 結點其中之一是另...

二叉查詢樹 紅黑樹

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