一、红黑树
1、介绍:红黑树是一种二叉查找树,但在每个节点上增加一个存储位表示节点的颜色,可以是red或black。通过对任何一条从根到叶子的路径上的各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的。
2、定义:它或者是一颗空树,或者是具有一下性质的二叉查找树
1):每个节点或是红的,或是黑的。
2):根节点是黑的。
3):每个叶节点(NIL)是黑的。(所有NULL结点称为叶子节点,且认为颜色为黑)
4):如果一个节点是红的,则他的两个子节点是黑的。
5):对每个节点,从该节点到其子孙节点的所有路径上包含相同数目的黑节点。
3、结构:树中的每个节点上包含五个域:color、key、left、right、p。如果其节点没有一个子节点或者父节点,则该节点相应的指针(p)域包含值NIL。我们把这些NIL视为指向二叉查找树的外节点,而把带关键字的节点是为树的内节点。
4、高度:一颗有n个内节点的红黑树的高至多为2lg(n+1)。
5、应用:Java集合中的TreeSet和TreeMap,C++ STL中的set、map,以及Linux虚拟内存的管理,都是通过红黑树去实现的。