特點:
1) 每個節點的顏色或是紅,或是黑
2)根節點是黑色
3)葉節點是黑色
4)如果乙個節點是紅色,則葉子為黑
5)對每個節點,從該節點
紅黑樹插入流程:
第一步:
和bst的插入過程相似,將待插入節點z插入到乙個紅黑樹的葉子節點,並著紅色
因為第一步之後可能會違反紅黑樹的某些性質,所以要進行下一步
第二步:
第二步只有當插入節點的父節點為紅色時才會執行,因為這個時候才會違反性質4)顏色調整分為六種情況,根據插入節點的父節點是祖父節點的左子樹還是右子樹分為2種,其中每種情況又有以下三種情況:
情況a:插入節點的父節點是紅色節點並且插入節點的叔叔節點(祖父節點的另外乙個子節點)也是紅色。
情況b:插入節點是父節點的右子樹並且叔叔節點是黑節點
情況c:插入節點是父節點的左子樹並且叔叔節點是黑節點
針對情況a:
針對情況b:
將z的父節點進行一次左旋轉轉換為情況c
針對情況c:
將祖父節點進行一次右旋轉轉換成最終形態
步驟三:
將根節點著為黑色
習題答案:
13.1-2
插入位置是35節點的右子樹
如果被標記為紅色,則不是一顆紅黑樹,因為紅色節點的子節點必須為黑色才滿足紅黑樹的性質。
如果被標為黑色,違反性質5
13.1-3
是13.1-4
兩個節點是黑色=》2
乙個節點是黑色=》3
兩個節點是紅色=》4
13.1-6
紅黑交叉分布:2^(2k+1)-1
全黑:2^k-1
13.1-7
全黑時最小為0:n
紅黑交錯2:1
13.3-1
如果著為黑色,則會永久破壞性質5。
13.3-4 因為當新插入節點不是根節點時,該節點一定為紅色,不會更改
13.3-5
todo
我的個人部落格:
演算法導論 13章 紅黑樹
1,每個節點非黑即紅。2,根節點是黑色的。3,葉節點 nil 是黑色的。4,紅節點的兩個孩子都是黑色的。5,對每個節點,從該節點到其所有後代的簡單路徑上,均包含了同樣數目的黑節點。為了維持紅黑樹的性質,要改變某些節點的顏色和指標結構,旋轉改變了指標結構。左旋 以x和y之間的鏈為 支軸 進行的,使得x...
學習 《演算法導論》第13章 紅黑樹 總結三
今天把這編部落格寫完吧,這裡學習紅黑樹的刪除操作,前面學習了 紅黑樹的定義及旋轉 紅黑樹的插入操作 紅黑樹的刪除操作也要結合二叉查詢樹的刪除操作來學習。在一棵n個結點的紅黑樹中刪除乙個結點也是一樣的,要花o lgn 的時間,刪除操作比插入還要複雜!刪除也分為兩步 第一步,當成二叉查詢樹處理,刪除乙個...
《演算法導論》筆記 第13章 13 1 紅黑樹的性質
紅黑樹中每個結點包含五個域 color,key,left,right和p。如果某結點沒有乙個子結點或父結點,則該域指向nil。我們把nil視為二叉樹的外結點 葉子 而帶關鍵字的結點視為內結點。一棵二叉樹如果滿足下面的紅黑性質,則為一棵紅黑樹 1 每個結點或是紅的,或是黑的。2 根結點是黑的。3 每個...