紅黑樹中每一個結點包含五個域:color,key,left,right和p。二叉樹
若是某結點沒有一個子結點或父結點,則該域指向NIL。im
咱們把NIL視爲二叉樹的外結點(葉子),而帶關鍵字的結點視爲內結點。img
一棵二叉樹若是知足下面的紅黑性質,則爲一棵紅黑樹:紅黑樹
1) 每一個結點或是紅的,或是黑的。集合
2) 根結點是黑的。時間
3) 每一個葉結點(NIL)是黑的。co
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 畫出在關鍵字集合{1,2,...,15}上高度爲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