红黑树的删除操作分析(简单粗暴有道理)

看了很多材料,关于红黑树的删除,大概所有的总结都大同小异,今天先聊聊对红黑树删除的情况分析:

红黑树的删除操作
1:节点命名约定

D表示要被删除的节点。即:取 Delete 的首字母;

P 表示父节点。即:取 Parent 的首字母;

S表示兄弟姐妹节点。即:取 Sibling的首字母;

U表示叔伯节点。即:取Uncle的首字母;

G表示祖父节点。即:取 Grandfather的首字母;

L表示左树。即:取Left的首字母;

R表示右树。即:取Right的首字母;

Nil表示叶子节点。即所谓的空节点;注意:红黑树中的叶子节点与其他树中所述说的叶子节点不是同一概念。而且红黑树中的叶子节点(即:Nil节点)永远是被定义为黑色的。



下文的节点命名表示将会使用以上这些命名约定或它们的组合表示。因此,请先牢记这些命名约定。举例:

DR表示要被删除的节点的右子树,即:右子节点;

SL表示兄弟节点的左子树,即:左子节点;

…

2:删除操作宏观分析

在红黑树中,删除一个节点往大的说,只有以下四种情况。

情况一:删除的节点的左、右子树都非空;

情况二:删除的节点的左子树为空树,右子树非空;

情况三:删除的节点的右子树为空树,左子树非空;

情况四:删除的节点的左、右子树都为空树;

其中情况一,可以按与其他二叉搜索树的删除方式一样处理,最终可以转换到后面的三种情况。具体为:找到(Old)D节点的直接后继节点(暂且称为X节点),然后将X的值转移到D节点,最后将X节点作为真正要被删除掉的节点(即:(Real)D节点)。这样删除操作后,可以保证该树仍然为一棵二叉搜索树。但由于红黑树的定义(即:红黑树的性质)约定。这样删除(Real)D节点后,可能会破坏红黑树的性质。所以需要额外做一些调整处理,这便是下面将要详细讨论的内容。

说明:下文中所提到的D,除非有特别说明,否则都将指的是(Real)D。

3:红黑树删除后平衡处理

在具体分析之前,再次列出红黑树的定义:

1)       任何一个节点非红即黑;

2)       树的根为黑色;

3)       叶子节点为黑色(注意:红黑树的所有叶子节点都指的是Nil节点);

4)       任何两个父子节点不可能同时为红色࿱
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值