33,027
社区成员




RB-DELETE(T,z)
if left[z]=NIL[T] or right[z]=NIL[T]
then y <- z
else y <- TREE-SUCCESSOR(z)
if left[y]!=NIL[T]
then x <- left[y]
else x <- right[y]
p[x] <- p[y]
if p[x]=NIL[T]
then root[T] <- x
else if y=left[p[y]]
then left[p[y]] <- x
else right[p[y]] <- x
if y!=z
then key[z] <- key[y]
if color[y]=BLACK
then RB-DELETE-FIXUP(T,x)
return y
RB-DELETE-FIXUP(T,z)
while x!=root[T] and color[x]=BLACK
do if x=left[p[x]]
then w <- right[p[x]]
if color[w]=RED
then color[w] <- BLACK
color[p[x]] <- RED
LEFT-ROTATE(T,p[x])
w <- right[p[x]]
if color[left[w]]=BLACK and color[right[w]]=BLACK
then color[w] <- RED
x <- p[x]
else
then if color[right[w]]=BLACK
then color[left[w]] <- BLACK
color[w] <- RED
RIGHT-ROTATE(T,w)
w <- right[p[x]]
color[w] <- color[p[x]]
color[p[x]] <- BLACK
color[right[w]] <- BLACK
LEFT-ROTATE(T,p[x])
x <- root[T]
else (same as then clause with “right” and “left” exchanged)
color[x] <- BLACK