红黑树
Contents
在了解红黑树之前,首先你要了解二叉查找树。
红黑树的定义
红黑树是一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是RED或者BLACK。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出2倍,因而是接近平衡的。
树中每个结点包含5个域:color,key,left,right和p。如果某结点没有一个子结点或父结点,则该结点相应的指针域(p)包含值NIL(即NULL)。我们将把这些NIL视为指向二叉查找树的外结点(叶子)的指针,而把关键字的结点视为树的内结点。
一棵二叉查找树如果满足下面的性质,就是一棵红黑树:
- 每个结点或是红色,或是黑色;
- 根节点是黑色;
- 叶结点是黑色;
- 红结点的儿子是黑色;
- 对于每个结点,从该结点到其子孙叶结点的所有路径上包含相同数目的黑结点。
红黑树示意图如下:
红黑树的应用
红黑树的应用比较广泛,主要是用它来存储有序的数据,它的时间复杂度是\(O(log_{2}n)\),效率非常之高。
例如:
- Java的集合中的TreeSet和TreeMap
- C++的STL中的set、map
- Linux中虚拟内存的管理
- …