红黑树的实现与验证--C++

本文介绍了红黑树的基本性质,包括它是二叉搜索树以及五个特殊性质。详细阐述了红黑树节点插入的过程,特别关注了插入可能导致的两个红色节点相连的情况,并给出了三种处理策略:单旋和双旋。最后,文章提到了如何通过编写函数来验证插入操作后红黑树的正确性,主要检查根节点颜色和各链的黑节点数量。
摘要由CSDN通过智能技术生成
 红黑树的实现与验证--C++

红黑树实例:

在说红黑树之前,我们先来认识一下它:

首先强调一点:红黑树也是二叉搜索树。那么它就满足二叉搜索树的性质,除此之外,他还有几个比较特殊的性质,了解这些,有助于我们后面的分析

性质:

1、红黑树所有的节点都有颜色(红或黑)

2、红黑树的根结点是黑色的

3、红黑树的两个红色节点不能相连

4、红黑树的每一条链的黑节点的个数相同

5、所有空的节点都是黑色的

知道了这些之后开始进入红黑树的创建:

显然这就是红黑树的插入操作的编写了,那么要想将一个节点插入红黑树中,首先你得判断红黑树是不是空的,如果是空的,那么直接就可以插入;不是空的,那么得找插入位置,然后再插入,这一点和二叉搜索树的插入是一样的。不过需要注意,最后把根结点置成黑色的

插入?

插入的节点我们都默认为红色的,但是性质3说,红色的节点不能相链,如果,之后我们不管的话,性质3肯定不会满足的,所以我们需要对红黑树进行调解,让其满足这些性质。那么我们就需要分情况讨论了,我们重点分析一下,两个红色节点相链的情况怎么处理。

总共可以分为3种情况:

情况一

双亲结点为红色,祖先结点为黑色, 叔叔节点存在,且为红色

其实这个图里包含了四种情况,我只是将其中的一种情况中的转化后的形式画了出来,其他的也一样。

情况二

双亲结点为红色,祖先结点为黑色,叔叔节点不存在或存在为黑色

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值