红黑树

介绍

   红黑树是一种自平衡二叉查找树,是一种扩充的BST,它可以在O( log ⁡ 2 n \log_2{n} log2n)时间进行查找,插入,和删除等操作。主要是对内存中,比较小规模的数据进行索引。

  • 性质
  1. 颜色特征: 结点是红色或者黑色的;
  2. 根特征: 根结点永远是黑色的;
  3. 外部特征: 扩充外部的叶子结点是空的,颜色为黑;
  4. 内部特征: 红色结点的两个子结点都是黑色的,不允许两个连续的红色结点;
  5. 深度特征: 任何结点到其子孙外部结点的每条简单路径都包含相同数目的黑色结点。
  • 红黑树的阶(rank,也称黑色高度)
    结点X的阶
  1. 从X结点到外部结点的黑色结点数量;
  2. 不包括X结点本身,包括叶子结点。

红黑树的插入

插入需要用到的一些操作

  1. 变色:即红黑变色。
  2. 左旋转:将结点想左下方移动一格,让原来的右结点代替它的位置。
  3. 右旋转:与左旋转相反。

插入:调用BST的插入算法

  • 把新插入的结点颜色着色为红色(思考为什么着色为红色?)
  • 若插入的结点为根结点,直接把此结点涂为黑色
  • 若父亲结点为黑色,则算法结束,否则双红调整

双红调整分为以下两种情况
情况1: 新增的结点X的叔父是黑色的
通过右旋转然后变色
在这里插入图片描述
红色结点的位置又分为四种情况,分别调整:
在这里插入图片描述
情况2:新增结点x的叔父是红色(如图)
祖父换色,对于叔父来说红色变为黑色之后并不影响其子树,然后以父亲为当前结点进行红红检查,之后情况与情况1中的四种相似,可进行重构调整,保持其祖父的颜色不变,不会破坏其他分支。
在这里插入图片描述

删除

后序补充

问题

对于插入情况2中,假如红红检查之后其叔父的结点仍然是红色的,之后也是红色的怎么办?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值