紅黑樹中每個結點包含五個域:color,key,left,right和p。
如果某結點沒有乙個子結點或父結點,則該域指向nil。
我們把nil視為二叉樹的外結點(葉子),而帶關鍵字的結點視為內結點。
一棵二叉樹如果滿足下面的紅黑性質,則為一棵紅黑樹:
1) 每個結點或是紅的,或是黑的。
2) 根結點是黑的。
3) 每個葉結點(nil)是黑的。
4) 如果乙個結點是紅的,則它的兩個兒子都是黑的。
5) 對每個結點,從該結點到其子孫結點的所有路徑上包含相同數目的黑結點。
採用哨兵來代表nil,它的color域為black,其它域為任意值。
從某個結點x出發(不包括該結點)到達乙個葉結點的任意一條路徑上,黑色結點的個數稱為該結點x的黑高度,用bh(x)表示。
引理:一顆有n個內結點的紅黑樹的高度至多為2lg(n+1)。
動態集合操作search、minimum、maximum、successor和predecessor可用紅黑樹在o(lgn)時間內實現,因為這些操作在一棵高度為h的二叉查詢樹上的執行時間為o(h),而包含n個結點的紅黑樹又是高度為o(lgn)的查詢樹。
13.1-1 畫出在關鍵字集合上高度為3的完全二叉查詢樹。以三種不同方式,向圖中加入nil葉結點並對各結點著色,是所得的紅黑樹的黑高度分別為2,3和4。
13.1-2 畫圖出呼叫tree-insert插入關鍵字36後的結果。如果插入的結點被標為紅色,所得的樹是否還是一棵紅黑樹?如果該節點被標為黑色呢?
黑:不滿足性質5)
紅:不滿足性質4)
13.1-3 定義鬆弛紅黑樹為滿足紅黑性質1,3,4和5的二叉查詢樹。換言之,根部可以是紅色或是黑色。考慮一棵根是紅色的鬆弛紅黑樹t。如果將t的根部標為黑色而其他都不變,則所得到的是否還是一顆紅黑樹?
根部標為黑色,滿足了性質2),沒有破壞性質4),從根結點到子孫結點上的黑結點數不變性質5)不變。
因此還是一顆紅黑樹。
13.1-4 假設將一顆紅黑樹的每乙個紅結點吸收到它的黑色父結點中,來讓紅結點的子女變成黑色父結點的子女。當乙個黑結點的所有紅色子女都被吸收後,其可能的度是多少?此結果樹的葉子深度怎樣?
不吸收:度為2
吸收乙個:度可能為3
吸收兩個:度可能為4
葉子深度為紅黑樹黑高度。
13.1-5 證明:在一棵紅黑樹中,從某結點x到其後代葉結點的所有簡單路徑中,最長的一條是最短一條的至多兩倍。
設最短路徑為k個黑結點:●●●●
由性質4沒有連續兩個紅結點,性質5路徑上黑結點數目相同,則最長路徑:○●○●○●○●
因此最長的一條是最短一條的至多兩倍。
13.1-6 在一棵高度為k的紅黑樹中,內結點最多可能有多少個?最少可能有多少個?
易知,最多可能有2^2k-1
最少可能有2^k-1
13.1-7 請描述出一棵在n個關鍵字上構造出來的紅黑樹,使其中紅的內結點數與黑的內結點數的比值最大。這個比值是多少?具有最小可能比例的樹又是怎樣?此比值是多少?
黑紅黑紅交替。2:1。
全黑最小。0
演算法導論 第13章 紅黑樹
特點 1 每個節點的顏色或是紅,或是黑 2 根節點是黑色 3 葉節點是黑色 4 如果乙個節點是紅色,則葉子為黑 5 對每個節點,從該節點 紅黑樹插入流程 第一步 和bst的插入過程相似,將待插入節點z插入到乙個紅黑樹的葉子節點,並著紅色 因為第一步之後可能會違反紅黑樹的某些性質,所以要進行下一步 第...
演算法導論 13章 紅黑樹
1,每個節點非黑即紅。2,根節點是黑色的。3,葉節點 nil 是黑色的。4,紅節點的兩個孩子都是黑色的。5,對每個節點,從該節點到其所有後代的簡單路徑上,均包含了同樣數目的黑節點。為了維持紅黑樹的性質,要改變某些節點的顏色和指標結構,旋轉改變了指標結構。左旋 以x和y之間的鏈為 支軸 進行的,使得x...
學習 《演算法導論》第13章 紅黑樹 總結三
今天把這編部落格寫完吧,這裡學習紅黑樹的刪除操作,前面學習了 紅黑樹的定義及旋轉 紅黑樹的插入操作 紅黑樹的刪除操作也要結合二叉查詢樹的刪除操作來學習。在一棵n個結點的紅黑樹中刪除乙個結點也是一樣的,要花o lgn 的時間,刪除操作比插入還要複雜!刪除也分為兩步 第一步,當成二叉查詢樹處理,刪除乙個...