红黑树理解

参考链接: 什么是红黑树-知乎


1. 红黑树来源

        红黑树是基于二叉查找树

        二叉查找树(BST)具备什么特性呢?

1.子树上所有结点的值均小于或等于它的根结点的值。

2.子树上所有结点的值均大于或等于它的根结点的值。

3.左、右子树也分别为二叉排序树。


2. 红黑树的特性

  • 1.结点是红色或黑色。
  • 2.根结点是黑色。
  • 3.每个叶子结点都是黑色的空结点(NIL结点)。
  • 4 每个红色结点的两个子结点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色结点)
  • 5.从任一结点到其每个叶子的所有路径都包含相同数目的黑色结点

下图是一个标准的红黑树


3.红黑树的插入

        现在考虑插入时具体情况对红黑树维持规则1~5进行说明

局面1:新结点(B)的父结点是黑色。

方法:不需要进行调整


局面2:新结点(A)位于树根,没有父结点。

方法:A变黑色即可


局面3:新结点(D)的父结点和叔叔结点都是红色。

方法: 3次变色——B先变黑,A再变红,C再变黑


 局面4:新结点(D)的父结点是红色,叔叔结点是黑色或者没有叔叔,且新结点是父结点的右孩子,父结点(B)是祖父结点的左孩子。

方法:先按B左旋转,得到局面5


局面5:新结点(D)的父结点是红色,叔叔结点是黑色或者没有叔叔,且新结点是父结点的左孩子,父结点(B)是祖父结点的左孩子。

方法:先按A进行右旋转,【期间会对B的右儿子进行交换成A的左儿子】,再让B变黑,A变红色:


3.1 插入例子讲解

 看上图,我们可以分别考虑插入结点【0,2,9,12,14,16,21,23,26,29】

大致根据局面1~5说明一下情况:

0/2/9/12: 这种情况父节点和叔结点都是红色【局面3】,先变色,会将8变红,1和11变黑,约等于插入一个红色的8,发现父亲结点13是黑色,不用继续调整

14/16:  父亲结点是黑色,不需要调整【局面1】

21/23/26/29:父亲和叔叔结点都是红色,需要先变色,25变红,22和27变黑,等于插入结点25。25的父节点17是红色,且没有叔叔结点,且自己是祖父结点的右儿子的右节点,需要按祖父结点13进行旋转【局面5】,17变成根结点【局面2/5】,17再变成黑色,13变成红色【局面5】。结束【注意15结点会变成13结点的右儿子

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值