一、红黑树是一种弱平衡二叉树
定义:红黑树是一种特殊的二叉查找树,在其结点结构中增加一个存储位表示结点的颜色。
重要性质:通过遵循对结点着色的某种规则,对于所有从根结点到叶子结点的路径,红黑树确保没有一条路径会比其他路径长出两倍。
二、红黑树的平衡条件
- 每个结点的颜色要么是红色,要么是黑色
- 根结点是黑色的
- 所有的叶结点都是空结点,并且是黑色的
- 如果一个结点是红色的,那么它的孩子结点是黑色的
- 从一个结点到其子孙结点的每条路径都包含相同数目的黑色结点
相对于平衡二叉树的平衡条件,该平衡条件较为宽松。虽然这可能导致红黑树的高度较高(仍是logn级别),但相较于平衡二叉树的插入/删除操作带来的频繁旋转,红黑树的插入操作最多进行两次旋转、删除操作最多进行三次旋转。由此可得,插入/删除的效率更好,但查找的效率较低(时间效率仍是O(logn))。
故对于红黑树而言,插入、删除、查找的时间复杂度都是O(logn)。
三、红黑树的应用
红黑树的应用比较广泛,主要是用它来存储有序的数据,它的时间复杂度是O(logn),效率非常高。
- C++ STL中的set和map是用红黑树实现的
- I/O多路复用的epoll采用红黑树组织管理sockfd,以支持快速的增删改查
- Nginx中用红黑树管理定时器,因为红黑树是有序的,可以很快得到距离最小的定时器
- Java集合中的TreeSet和TreeMap是用红黑树实现地
- Linux虚拟内存的管理,进程的虚拟内存区域都存储在一棵红黑树上,每个虚拟地址区域都对应红黑树的一个结点,该结点的左指针指向相邻的低地址虚拟存储区域,右指针指向相邻的高地址虚拟地址空间
四、插入和删除操作
参考博文:一定让你真正彻底明白红黑树、红黑树算法详细介绍