擷取自
演算法(第四版)
紅黑二叉查詢樹背後的基本思想是用標準二叉查詢樹(完全
由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。如果乙...