红黑树的删除

具体算法思想及代码见添加链接描述
红黑树的性质:
节点是红色或黑色。
根节点是黑色。
每个叶节点(这里的叶节点是指NULL节点,在《算法导论》中这个节点叫哨兵节点,除了颜色属性外,其他属性值都为任意。为了和以前的叶子节点做区分,原来的叶子节点还叫叶子节点,这个节点就叫他NULL节点吧)是黑色的。
每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点,或者理解为红节点不能有红孩子)
从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点(黑节点的数目称为黑高black-height)。

删除操作思想:
删除的节点为红色的情况:
1 删除红色的叶子节点: 直接删除
2 删除的红色节点只有左子树或只有右子树: 不可能,违背红黑树性质
3 删除的红色节点有左子树和右子树:递归

删除的节点为黑色的情况:
1 删除黑色的叶子节点:
{
情况1:待删除节点D的兄弟节点S为红色: 使D的兄弟节点变成了黑色,后面情况
情况2:兄弟节点为黑色,且远侄子节点为红色:将P(父亲)和S(兄弟)的颜色对调,然后对P树进行类似AVL树RR型的操作,最后把SR(远侄子)节点变成黑色,并删除D即可
情况3:兄弟节点S为黑色,远侄子节点为黑色,近侄子节点为红色: 将SL(近侄子)右旋,并将S和SL的颜色互换,这个时候就变成了情况2
情况4:父亲节p为红色,兄弟节点和兄弟节点的两个孩子(只能是NULL节点)都为黑色的情况: 父亲节点P改成黑色,将兄弟节点S改成红色,然后删除D即可
情况5:父亲节点p,兄弟节点s和兄弟节点的两个孩子(只能为NULL节点)都为黑色的情况: 将兄弟节点S的颜色改成红色,但是经过P的路径上的黑色节点数会少1,应该以P的父母结点为起始点,继续根据情况进行平衡操作
}
2 删除的黑色节点仅有左子树或者仅有右子树: D的孩子(左或右)替换D,删除D的孩子
3 删除的黑色节点有左子树和右子树:递归

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值