红黑树的实现与验证--C++
红黑树实例:
在说红黑树之前,我们先来认识一下它:
首先强调一点:红黑树也是二叉搜索树。那么它就满足二叉搜索树的性质,除此之外,他还有几个比较特殊的性质,了解这些,有助于我们后面的分析
性质:
1、红黑树所有的节点都有颜色(红或黑)
2、红黑树的根结点是黑色的
3、红黑树的两个红色节点不能相连
4、红黑树的每一条链的黑节点的个数相同
5、所有空的节点都是黑色的
知道了这些之后开始进入红黑树的创建:
显然这就是红黑树的插入操作的编写了,那么要想将一个节点插入红黑树中,首先你得判断红黑树是不是空的,如果是空的,那么直接就可以插入;不是空的,那么得找插入位置,然后再插入,这一点和二叉搜索树的插入是一样的。不过需要注意,最后把根结点置成黑色的
插入?
插入的节点我们都默认为红色的,但是性质3说,红色的节点不能相链,如果,之后我们不管的话,性质3肯定不会满足的,所以我们需要对红黑树进行调解,让其满足这些性质。那么我们就需要分情况讨论了,我们重点分析一下,两个红色节点相链的情况怎么处理。
总共可以分为3种情况:
情况一:
双亲结点为红色,祖先结点为黑色, 叔叔节点存在,且为红色
其实这个图里包含了四种情况,我只是将其中的一种情况中的转化后的形式画了出来,其他的也一样。
情况二:
双亲结点为红色,祖先结点为黑色,叔叔节点不存在或存在为黑色