Loading

算法导论第十三章:红黑树下之删除分析

与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为
posted @ 2020-04-15 15:10  文牧之  阅读(21)  评论(0)    收藏  举报  来源