算法导论第十三章:红黑树下之删除分析
与n个节点的红黑树上的其他操作一样,删除一个节点要花费O(lgn)时间,但与插入操作相比,删除操作要稍微复杂一点。
如果被删除节点是红色的,红黑性质将继续保持,但如果被删除节点是黑色的话,就有可能发生一个或多个红黑性质被破坏的情况。
其核心在于,进行删除操作后的红黑树如果不符合其性质,我们如何进行调节。
下面结合伪代码进行讲解:
RB-TRANSPLANT方法将节点v替换u节点的位置
RB-TRANSPLANT(T,u,v) //T为树,u,v为节点
if u.p==T.nil //如果u的父节点等于哨兵(哑节点,可以看作空)
T.root=v //树T的根节点设为v
else if u==u.p.left //否则如果u是其父节点的左孩子
u.p.left=v //将其父节点的左孩子换为v
else u.p.right=v //否则将其父节点的右孩子换为v
v.p=u.p //v的父节点改为u的父节点
RB-DELETE()方法用于执行红黑树的删除操作:
RB-DELETE(T,z) //T为