数据结构

阅读更多

RedBTree 红黑树

概述:先来看下算法导论对R-B Tree的介绍:

 

红黑树,一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是RedBlack

通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。

 

基本二叉树存在的不足:如图

上图转载其他作者博客。

 

红黑树多了相关的数据结构的约束,这个约束就是  红黑树的特性:

红黑树的特性

每个结点要么是红的,要么是黑的。

根结点是黑的。

每个叶结点,即空结点(NIL)是黑的。

如果一个结点是红的,那么它的俩个儿子都是黑的。

对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点。

 

红黑树的五个特性的限制,就能抑制二叉树的这种最坏的数据树的出现,到了一种相对不平衡的时候,条件的约束就需要对整棵树进行旋转,如下图

 

初始的红黑树,然后新添加一个元素:4

 

 

4置为红色满足,从任何节点到叶子节点,中间的黑节点的数量一致,然后不能出现父子都是红色的条件制约。于是需要变化:

 

 

把中间两个节点和上一级的节点颜色互换,同能的达到了任何节点到叶子节点的黑色节点数量一致,但是明显的红色节点再次出现了父子同色。

 

当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的右子对策:当前节点的父节点做为新的当前节点,以新当前节点为支点左旋。如下图所示此时就需要旋转了:

 

 

结果就是将节点 7 移到了 节点2 的父一级,并将节点 7 的那些单节点再转移到节点2 的右边,保持了对数据的对称性,为完美二叉树做数据处理,但是问题又来了,继续满足了节点到叶节点的黑色数量一致,但是两个红色节点为父子还是一样不符合要求,而且7的父节点下面都是单节点,因此,这时父节点11 就顺势要变成7的右节点,且7可以变成root了,那么7 就可以变色成黑色了,而8 可以旋转到11下面做左节点,11变成红色,如图:

 

 

这时的二叉树即符合要求又在对称性上堪称完美,这个二叉树才是真正的完美二叉树,这时我要提一提二叉树和红黑二叉树的却别了。

 

红黑二叉树的本质就是一颗二叉树,但是它独有的特性使它在二叉树上又多了一份自我完善的数据算法,因此,红黑二叉树在查找数据的时候是非常标准的 o(logN)

 

红黑二叉树我也会在接下来的几天将实现简单又好理解的java 代码贴出来供大家鉴赏,OK 今天的工作之余就写这么多了。

 

不知道怎么把图片添加上去,粘贴都粘贴不上,我把文档上传了,有兴趣的便宜可以下载的看

你可能感兴趣的:(数据结构,红黑二叉树)