红黑树

红黑树:搜索二叉树,节点中加了颜色,不是红色就是黑色,树中最长路径不超过最短路径的2倍。

AVL树是严格平衡的二叉搜索树,红黑树是近似平衡二叉树。

  • 红黑树的性质

总结:1、根是黑的 ;2、没有连续的红节点;3、每条路径都有相同数量的黑节点。

  • 为什么满足上面的性质,红黑树就能保证:其最长路径中节点个数不会超过最短路径节点个数的2倍?
  • 答:最短路径:全黑,最长路径:一黑一红,所以最多是2倍。

插入

Case1:cur为红,p为红,g为黑,u存在且为红.

---->  p和u变红,g变红。

  1. 如果g是根,把g再变黑,结束。
  2. 如果g不是根,在看g父亲的颜色,如果g的父亲是黑色,结束。如果g的父亲是红色,继续往上处理。

 

 这样变化保证没有连续的红节点,且保持子树中每条路径的黑节点的数量不变。

cur有可能是新增,也有可能是下面子树的祖父,原来是黑色的,是由于变色处理变成红色的。

针对上面情况的抽象图如下:

                                          

 

Note:不管是什么情况变化来的,这里处理一样。只要u存在且为红,那么p和u变黑,g变红,再继续往上处理。这里只关注颜色,而p, g, u几个节点在左边或右边都一样处理。 

Case2:cur为红,p为红,g为黑,u不存在 / u为黑.

  • 1、u不存在,那么cur就是新增节点。 
  • 右单旋,g变红,p变黑。

                               

  • 2、u存在,那么cur一定不是新增节点。 
  • cur原来是黑的,这里变红,是由case1变来的。
  • 右单旋,g变红,p变黑。

针对上面情况的抽象图如下:

                                                               

Case3:cur为红,p为红,g为黑,u不存在 / u为黑.

          ---->旋转+变色

  • 1、u不存在,那么cur就是新增节点。 
  • 左右双旋(p左旋,g右旋),g变红,cur变黑。

  • 2、u存在,那么cur一定不是新增节点。 

针对上面情况的抽象图如下:

                                                               

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值