红黑树浅谈

来源:互联网 发布:胎教讲故事软件 编辑:程序博客网 时间:2024/05/20 06:09


今天花了一个下午+晚上看了,《算导》的二叉搜索树,还有红黑树。

STL 中set、 map都是内部维护一颗红黑树。


  红黑树介绍:

红黑树就是一棵平衡二叉搜索树。只不过是在每个节点上添加了颜色(Black and Red),红黑两种颜色 。红黑树确保没有一条路径会比其
他路径长出俩倍,因而是接近平衡的。

一般普通的二叉搜索树,传统意义上建树O(nlogn),插入,删除,查找的复杂度O(logn), 因为是近乎二分渐进的。但是这个是基于这个二叉树是平衡的基础上,如果这个

数比较奇葩,是一条链式的。那二叉搜索树的各种操作,就和链表的操作差不多。

所以就产生了很多使一棵树平衡的算法。红黑树就是一个,还有treap,伸展树等等。


如下就是一颗红黑树:每个节点包含有left,rigth,p,val,color这5个性质(左孩子,有孩子,双亲,值,颜色)。

需要注意的是:红黑树,将所有的null节点设置为黑色,并且只用一个表示,所有的叶子节点都指向它,根节点的p也指向它。




红黑树性质:


1.每个节点或是红色,或是黑色。

2.根节点是黑色的。

3.每个叶节点(NIL)是黑色的

4. 如果一个节点是红色的,那么它的两个子节点都是黑色的

5 对每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。



红黑树 插入,删除节点都得使节点满足如上性质。


插入删除都得用到  的知识  节点的旋转:

右旋: 就是把左边旋转到自己这然后自己跑到他的右边

左旋:同理




插入、删除 以后再补充。

1 0