红黑树结构优缺点,红黑树解决什么问题

首页 > 经验 > 作者:YD1662022-11-14 14:35:35

3.3. 红黑树插入节点的分析(实现红黑树最最最关键的一步)

可以看到我们上面在红黑树节点的构造的时候将节点的默认颜色给为红色,那么我们在插入节点的时候就要特别考虑性质3:不可以有两个红色节点连在一起。这里我们可以一共可以分为两大类,一类将节点插入当前红黑树的左子树中,另一类就是将节点插入红黑树的右子树当中。

第一大类(将节点插入红黑树的左子树中)

第一种情况(叔叔节点存在而且为红色,这里将节点插入红黑树的内测还是内测处理方式是一样的)

1.我们插入节点的parent节点为黑色:那么这种情况是不需要调整的。

红黑树结构优缺点,红黑树解决什么问题(5)

​2.我们插入节点的parent节点为红色,而且插入节点的叔叔节点也存在而且为红色的,那么当前节点插入之后就违反了红黑树的性质3,就需要对当前树进行调整。这里解决的时候我们就将当前parent节点和叔叔节点u的颜色变为黑色。

红黑树结构优缺点,红黑树解决什么问题(6)

为什么要这样做呢?

答案:这里我们将cur节点插入之后要解决当前parent和cur颜色都为红色的问题,那么只能将cur和parnet其中一个节点的颜色变为黑色,但是肯定不能将cur节点变为黑色,因为这样在包含cur的路径中就多一个黑色节点,那么我们就要将除包含cur之外的路径中的黑色节点全部都减少一个,又因为此时cur是新插入的节点如果将cur颜色变为黑色那么此时就只有一条路径黑色节点个数 1,如果要调整的话,其他所有节点中黑色节点个数都要减少一个这样肯定是不行的,那么我们只能将parent节点的颜色变为黑色,那么当parent节点变为黑色之后我们可以看到在包含parent的路径中黑色节点增加,但是包含parent节点的路径一定包含parent的双亲节点也就是g节点那么我们将双亲节点g颜色改为红色,那么不就将包含parent路径的黑色节点个数减少一个了吗。然后我们发现又出现新的问题了,就是原本包含u节点的路径因为g节点变为了红色那么包含u节点的路径中少了一个黑色节点(因为包含u节点的路径一定包含g节点)那么我们此时只要将u节点的颜色变为黑色即可。

上面将parent和u的节点更新为红色之后,我们还要考虑g节点让我们更新为红色之后那它的双亲节点是否存在,是否是红色节点:

相关视频推荐



学习地址:

需要C/C Linux服务器架构师学习资料加qun812855908获取(资料包括C/C ,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享

红黑树结构优缺点,红黑树解决什么问题(7)

如果g的双亲不存在:

那么此时g就是根节点那么我们此时需要将g颜色更新为黑色,因为红黑树的根节点必须是黑色的。

红黑树结构优缺点,红黑树解决什么问题(8)

上一页12345下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.