红黑树详解二:红黑树的插入

系列文章目录

1、红黑树的定义

  1、节点是红色或黑色
  2、根节点是黑色
  3、不能有两个连续的红色节点(但是可以有两个连续的黑色节点)
  4、从任一节点到其每个叶子节点路径经过的黑色节点个数相同。

性质3和4共同决定了:**最长路径的节点总数量不会超过最短路径的两倍。**因为黑色节点数量要一样,红色不能连着来,从而路径全黑时最短,红黑交替时最长。比如4个黑色节点,最短:黑-黑-黑-黑(4),最长:黑-红-黑-红-黑-红-黑(7)。

2、插入

首先约定一下节点的名称:
约定名称
红黑树属于二叉搜索树,插入动作也与二叉搜索树一致,只不过红黑树在插入之后,多了平衡动作(旋转与涂色)。

新插入的节点均为红色节点,因为红色不会影响路径上黑色节点的数量,保持性质4。如果父节点为黑色,就直接结束了;如果父节点为红色,则需要另外处理了。

以新插入的节点为当前平衡节点N,插入平衡大体上分为以下情形:
插入情况示例

情形一:N为根节点

直接插入,颜色变为黑色。
N为根节点

情形二:父节点为黑色

直接插入,无需其他操作
父亲为黑色

情形三: 父节点和叔叔节点均为红色

将父亲和叔叔节点变为黑色,祖父节点变为红色,以祖父节点为要插入的节点继续向根节点方向遍历,执行平衡操作。
父亲和叔叔均为红色

情形四: 父节点为红色,叔叔节点为黑色,且父亲和N同一边

父亲和N节点都为其父亲的左子树,父节点变为黑色,祖父节点变为红色,以祖父节点进行右旋操作。

父亲N同左

父亲和N节点都为其父亲的右子树,父节点变为黑色,祖父节点变为红色,以祖父节点进行左旋操作。
同右

情形五: 父节点为红色,叔叔节点为黑色,且父亲和N不在同一边

父亲在左边,N在右边,以父节点进行左旋,这时父亲和N都在左边,在进行上述同左操作即可。
父左N右

父亲在右边,N在左边,以父节点进行右旋,这是父亲和N都在右边,在进行上述同右操作即可。
父右N左边

3、总结

  1. 插入节点为根节点,变为黑色
  2. 父节点为黑色,直接插入
  3. 父节点和叔叔节点均为红色,父节点和叔叔节点均变为黑色,祖父节点变红,把祖父节点当作要插入节点,递归执行。
  4. 父节点和插入节点在同一边,父节点变黑,祖父节点变红,同左右旋,同右左旋。
  5. 父节点为红色,叔叔节点为黑色,如果不在同一边,转换为同一边(N在右边以父节点左旋;N在左边,以父节点右旋),然后执行步骤四。

4、完整例子

例:插入 10,20,15,30,5,8;
完整例子
参考连接:
https://www.jianshu.com/p/96e652ccf720

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值