1
我正在嘗試引入算法第3版中的RB-DELETE-FIXUP。他們有這樣的代碼:在紅黑樹中刪除
RB-DELETE-FIXUP(T, x)
1 while x != root[T] and color[x] == BLACK
2 do if x == left[p[x]]
3 then w = right[p[x]]
4 if color[w] == RED
5 then color[w] = BLACK ? Case 1
6 color[p[x]] = RED ? Case 1
7 LEFT-ROTATE(T, p[x]) ? Case 1
8 w = right[p[x]] ? Case 1
9 if color[left[w]] == BLACK and color[right[w]] == BLACK
10 then color[w] = RED ? Case 2
11 x = p[x] ? Case 2
12 else if color[right[w]] == BLACK
13 then color[left[w]] = BLACK ? Case 3
14 color[w] = RED ? Case 3
15 RIGHT-ROTATE(T, w) ? Case 3
16 w = right[p[x]] ? Case 3
17 color[w] = color[p[x]] ? Case 4
18 color[p[x]] = BLACK ? Case 4
19 color[right[w]] = BLACK ? Case 4
20 LEFT-ROTATE(T, p[x]) ? Case 4
21 x = root[T] ? Case 4
22 else (same as then clause with "right" and "left" exchanged)
23 color[x] = BLACK
我無法理解如何將樹的情況下,4所平衡望着這一形象:(從here)
的情況下,結果4不平衡。從D到A,黑色高度是2.而D到E,黑色高度是1.我在這裏錯過了什麼?
我不知道,我一直在看這個問題一段時間。當我實施RB樹時,我使用維基百科作爲參考,它有不同的情況。我會繼續研究它,看看我缺少什麼。 – Justin