紅黑二叉查詢樹

2021-08-01 12:08:27 字數 2494 閱讀 2989

擷取自

演算法(第四版)

紅黑二叉查詢樹背後的基本思想是用標準二叉查詢樹(完全

由2-節點構成)和

一些額外的資訊(替換

3-節點)來表示

2-3樹。

紅黑樹中的鏈結分為兩種:

1、 將兩個2-節點連線起來

構成3-節點的紅鏈結

2、 2-3樹中的普通鏈結為黑鏈結

將兩個-2節點用左斜的紅色鏈結鏈起來可表示3-節點

1、 如果將一顆紅黑樹中的紅鏈結畫平,那麼所有的空鏈結到根節點的距離都是相同的

2、 如果將由紅鏈結相連的節點合併,得到的就是一顆2-3樹

3、 紅黑樹即是二叉查詢樹又是2-3樹

增加乙個顏色域,以表示指向該節點(從

他的雙親節點指過來)的鏈結的顏色。

如果指向該節點的鏈結是紅色的,該節點的顏色域內應該表示為紅色,否則表示為黑色

我們約定,空鏈為黑色。

注:當提及乙個節點的顏色時,指的是指向該節點的鏈結的顏色

在實現某些操作時可能出現紅色右鏈結或是兩條連續的紅鏈結,這是不符合紅黑樹定義的,我們需要對其進行旋轉操作,以改變紅鏈結的方向。

左旋轉

動畫:

右旋轉

動畫:

旋轉操作:

1、 只是將兩個鍵中的較小者作為根節點變為將較大者作為根節點。

2、 可以保持紅黑樹的重要性質:有序性、

完美平衡、不存在兩條連續的紅鏈結、不存在紅色的右鏈結。

1、 如果新鍵小於老鍵,新增乙個紅色節點,新增後新的紅黑樹和單個3-節點完全等價

2、 如果新鍵大於老鍵,那麼新增的紅色節點會產生一條紅色右鏈結,需要將其左旋轉來修正紅色右鏈結,修正根節點的連線

注:當插入新節點時,總是用紅鏈結將它與雙親節點鏈結

將其分為三種情況:

1、新鍵小於樹中的兩個鍵2、

新鍵大小在兩者之間3、

新鍵大於樹中的兩個節點

這三種情況都會產生兩條紅鏈結同時鏈結乙個節點的情況,我們應該旋轉以修正它:

1) 新鍵大於原樹中的兩個鍵,新鍵被鏈結到3-節點的右節點,此時樹是平衡的,根節點為中間大小的鍵,它有兩條紅鏈分別和較小、較大的節點相鏈。將兩條紅鏈的顏色變黑,就得到了一顆由三個節點組成,高為

2的平衡樹。且能對應一顆

2-3樹。 ,

轉換顏色即可

2) 新鍵小於原樹中的兩個鍵,新鍵被鏈結到最左邊的空鏈,這時產生了兩條連續的左紅鏈,將上層的紅鏈結右旋轉使樹轉換為第(1)種情況

即:新節點的鏈結是3-節點的左鏈結,右旋轉上層鏈結再轉換顏色

3) 新鍵介於原樹中的兩個鍵之間,也會產生兩條連續的紅鏈結,一條左紅鏈結一條右紅鏈結,將下層的紅鏈結左旋轉使樹轉換為第(2)種情況

即:新節點的連線時3-節點的中鏈結,左旋轉下層鏈結,接著右旋轉上層,再轉 換顏色

當原樹中根節點各鏈結出去乙個紅色鏈結時,我們應該轉換鏈結的顏色。將鏈結出去的左右紅鏈結變黑,再將鏈結到根的鏈結變紅。即將子節點顏色由紅變黑,將父節點的顏色由黑變紅。

顏色的變換是區域性的,不會影響整棵樹的黑色平衡性。

效能總結:

以公升序鍵插入構造紅黑二叉查詢樹

以降序鍵插入構造紅黑二叉查詢樹

隨機插入構造紅黑二叉查詢樹

紅黑二叉查詢樹

三 各種查詢符號表的效能比較 之前所述的 2 3樹 的插入演算法並不難理解,我們要利用名為紅黑二叉查詢樹的簡單資料結構來表達並實現它。最後的 量並不大。紅黑樹背後的思想是用標準的二叉查詢樹 完全由2 結點構成 和一些額外的資訊 替換3 結點 來表示 2 3樹 對於任意的2 3樹,只要對結點進行轉換,...

紅黑二叉查詢樹

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

二叉查詢樹 紅黑樹

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