《算法导论》中红黑树删除结点的伪代码没看明白
伪代码如下
RB-DELETE(T, z)1 if left[z] = nil[T] or right[z] = nil[T]2 then y ← z3 else y ← TREE-SUCCESSOR(z)4 if left[y] ≠ nil[T]5 then x ← left[y]6 else x ← right[y]7 p[x] ← p[y]8 if p[y] = nil[T]9 then root[T] ← x10 else if y = left[p[y]]11 then left[p[y]] ← x12 else right[p[y]] ← x13 if y ≠ z14 then key[z] ← key[y]15 copy y's satellite data into z16 if color[y] = BLACK17 then RB-DELETE-FIXUP(T, x)18 return yRB-DELETE-FIXUP(T, x)1 while x ≠ root[T] and color[x] = BLACK2 do if x = left[p[x]]3 then w ← right[p[x]]4 if color[w] = RED5 then color[w] ← BLACK // Case 16 color[p[x]] ← RED // Case 17 LEFT-ROTATE(T, p[x]) // Case 18 w ← right[p[x]] // Case 19 if color[left[w]] = BLACK and color[right[w]] = BLACK10 then color[w] ← RED //Case 211 x ← p[x] //Case 212 else if color[right[w]] = BLACK13 then color[left[w]] ← BLACK //Case 314 color[w] ← RED //Case 315 RIGHT-ROTATE(T, w) //Case 316 w ← right[p[x]] //Case 317 color[w] ← color[p[x]] //Case 418 color[p[x]] ← BLACK //Case 419 color[right[w]] ← BLACK //Case 420 LEFT-ROTATE(T, p[x]) //Case 421 x ← root[T] //Case 422 else (same as then clause with "right" and "left" exchanged)23 color[x] ← BLACK