红黑树的构建与插入

红黑树的构建(插入过程)
在这里插入代码片

基础知识
红黑树本质上是一种二叉查找树,但它在二叉查找树的基础上额外添加了一个标记(颜色),同时具有一定的规则。这些规则使红黑树保证了一种平衡,插入、删除、查找的最坏时间复杂度都为 O(logn)。它的统计性能要好于平衡二叉树(AVL树)。

它具有以下5个性质:
1、节点颜色必须是红色或者黑色
2、根节点是黑色
3、每个叶子节点(NIL节点、空节点)是黑色的
4、每个红色节点的两个子节点都是黑色
5、从任一节点到每个叶子的所有路径都包含数目相同的黑色节点

红黑树中插入结点后,主要有3大种6小种:

  1. 红色结点作为根节点,涂黑,直接插入。
  2. 父结点是黑结点,直接插入红色结点。
  3. 父结点是红色结点,这时候直接插入红色结点,不满足性质4。

这时候就需要根据其叔叔结点是红色还是黑色分别处理。(分为6小种)

1.叔叔结点是红色,那么 就要把父节点和叔叔节点涂成黑色,祖父节点涂成红色(但如果是根节点涂成黑色)。

下面情况的步骤就像是对平衡二叉树插入新值一样,对不平衡的部位进行调整

对最末端不平衡的三个结点,选取中间那个结点作为根结点重新构建二叉树。依次往上进行递归。
[【平衡二叉树的调整】](https://www.bilibili.com/video/BV1T44y1y7Z7?share_source=copy_web&vd_source=6c92134ec8fe8ce51f059eee460ff9bf) 

左右支处理情况相同
2.叔叔结点是黑色,父结点位于祖父结点的左分支,插入结点位于父结点的左分支,旋转加变色;插入结点位于父结点的右分支,旋转旋转加变色。
3.叔叔结点是黑色,父结点位于祖父结点的右分支,插入结点位于父结点的右分支,旋转加变色;插入结点位于父结点的左分支,旋转旋转加变色。
在这里插入图片描述

构建和插入案例见如下链接处,例子极好
https://www.cnblogs.com/zh718594493/p/12232297.htm

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值