红黑树简要总结

【博客】这个人的博客讲得太好了http://www.cnblogs.com/skywang12345/p/3245399.html 
【视频】北京大学《高级数据结构与算法》B站上面有 两个配合看,真的特别好。先看博客再看视频。 
【我的github上会放一些代码】https://github.com/kouhonglady/dataStruct_algorithms 
【注意!!】这个是我看了视频和博客的总结,如果直接看,看不懂了,给我自己写个笔记。

1.【红黑树基本的五个性质】:

  • 1)每个结点要么是红的,要么是黑的。
  • 2)根结点是黑的。
  • 3)每个叶结点,即空结点(NIL)是黑的。
  • 4)如果一个结点是红的,那么它的俩个儿子都是黑的。
  • 5)对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点(这个数目叫做阶,不包括该节点本身)。

2.【红黑树性质】:

  • 1) 红黑树是满二叉树,空叶节点也看作节点,阶为K的红黑树,最短路是K,最长是2K从根到叶的简单路径长度。
  • 2)阶为K的红黑树,树高最小为K+1,最高为2K+1.。树高最大为2log(n+1)+1。

3.【插入算法】
新节点着色为红色,若父节点是黑色算法结束。若父节点红色,双红调整。(注意这个和我开头给的博客里面写的不同,是因为博客后面两种都属于情况二)

  • 情况一:新增节点的叔父节点也是红色,父–祖换色,继续对祖父节点进行红红冲突检查(因为祖父节点变成了红色,可能与上面的节点发生红红冲突。)一直往上走的原因是,转化为情况二,可能会变平衡,如果一直不平衡最后走到树根,直接把红色变成黑色,就平衡啦。
    -这里写图片描述
  • 情况二:新增节点的叔父节点是黑色,这样就通过各种旋转,把其变得平衡。这个过程也涉及父祖变色。但是只有当其中两种情况通过旋转变成“父祖子”在一条斜线上再变色再进行最后一步旋转。
  • 这里写图片描述

4.【删除算法】
先调用BST的删除算法,删除的子节点只会是最多有一个孩子的节点(在其右子树中找替代节点的时候,着色不变)。如果删除的节点是红色的,则红黑树平衡,不需要调整。否则需要进行颜色平衡。【把删除节点的颜色复制给删除节点的子节点(即代替删除节点位置的节点),变成双色节点。】

  • 情况一: x是“红+黑”节点。
    处理方法:直接把x设为黑色,结束。此时红黑树性质全部恢复。
  • 情况二:x是“黑+黑”节点,且x是根。
    处理方法:什么都不做,结束。此时红黑树性质全部恢复。
  • 情况三:x是“黑+黑”节点,且x不是根。 双黑调整(为了满足红黑树性质5,设双黑节点的兄弟节点为c)
    —-case1:c是黑色,且子节点有红色节点,–>重构,完成操作(a,b两种情况,见图)。
    这里写图片描述
    —–case2:C是黑色,且有两个黑子节点,–>换色–>父节点B原为黑色,可能需要从B继续向上调整。(这种情况如果不能转换为case1,最后会变成B节点为双黑,并且为根节点,即情况二。)
    这里写图片描述
    —–case3:C是红色, –>转换状态–>C转为父节点,调整为case1或者case2继续处理。
    这里写图片描述
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值