【发布时间】:2019-05-16 11:00:29
【问题描述】:
【问题讨论】:
标签: data-structures red-black-tree
【问题讨论】:
标签: data-structures red-black-tree
但它是一棵红黑树吗?
没有。这是插入节点后的红黑树,在本例中为 N。这是修复树的所有过程的一部分,因此它再次成为红黑树。
图片没有错。
当插入发生时,新节点将位于底部,一个叶子节点,它通常是红色的。修复过程针对根目录工作(并且保证工作)。
用伪算法术语来说,算法是
LOOP
P = PARENT(N)
IF P == NULL THEN
'N MUST BE ROOT
N.COLOUR = BLACK
RETURN
ENDIF
IF P.COLOUR == BLACK THEN
'FIXUPS HAVE ENDED
RETURN
ENDIF
'NOTE: SINCE PARENT IS RED AND PREVIOUSLY WAS A RED-BLACK TREE THEN
'GRANDPARENT EXISTS AND MUST BE BLACK AS ROOT NODE IS BLACK
G = GRANDPARENT(N)
U = UNCLE(N)
IF U.COLOUR = RED THEN
'COLOUR FLIP. BLACK NODE HEIGHT DOES NOT CHANGE
P.COLOUR = BLACK
U.COLOUR = BLACK
G.COLOUR = RED
'BUT G's PARENT COULD BE RED, SO LOOP AGAIN WITH NEW N BEING G
N = G
ELSE
'PARENT IS RED AND UNCLE IS BLACK
IF N IS ON INSIDE UNDERNEATH G
ROTATE OUTWARDS ABOUT P
N = P
END IF
'N IS ON OUTSIDE
ROTATE ABOUT G TOWARD U
P.COLOUR = BLACK 'NEW GRANDFATHER
G.COLOUR = RED 'NEW UNCLE
'N.COLOUR = RED 'NO CHANGE
RETURN
END IF
ENDLOOP
【讨论】: