红黑树

红黑树是一个平衡的二叉树,但不是一个完美的平衡二叉树。

本篇文章引用了这篇文章的内容,作此声明。

特征

  1. 根节点是黑色的。
  2. 所有节点是黑色或红色的。
  3. 每个叶节点(NIL或空节点)是黑色;
  4. 每个红色节点的两个子节点都是黑色的,也就是两个节点(父节点与子节点)不能是同样的颜色。
  5. 从任一节点到其每个叶节点的所有路径都包含相同数目的黑色节点

在这里插入图片描述

插入

因为红黑树本质上还是一个平衡树,所以它的插入还是需要满足平衡树插入的法则。只不过多添加了颜色的标准。
一般插入的结点都是红色的。

  1. 这边就统说一下,在插入后不会影响二叉树的平衡性,是不会去动的。这与正常的平衡树是一致的。
  2. 当插入结点为左结点,并且父节点为红色,叔叔结点为黑色时,将父节点进行右旋转,将祖父节点和父节点的颜色进行互换。

在这里插入图片描述
在这里插入图片描述
3. 当插入结点为父节点的右结点时,先将父节点和插入节点进行左选择,之后就按照上面的情况进行。
在这里插入图片描述在这里插入图片描述
4. 当插入结点,父节点和叔叔结点都为红色时。这个时候,只需将父亲节点和叔叔节点涂黑,将祖父节点涂红。
在这里插入图片描述
在这里插入图片描述
如果出现了不符合规则的情况,则要进行选择,也就按照上诉规则来进行。

这里我列举了在左子树上的插入情况,在右边是同样的。

这里借用这篇文章的例子来试一试。红黑树

在这里插入图片描述
在原树上插入20
在这里插入图片描述
按照上诉所说,将21与25涂黑,22涂红
在这里插入图片描述
发现17与22冲突,这时候可以看成在原红父节点的右边插入了一个新的结点,所以进行左旋转。
在这里插入图片描述
最后根据规则,修改颜色。
在这里插入图片描述
这样一个插入就完成了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值