4. 红黑二叉树

一、红黑树是一种平衡二叉树

定义:红黑树是一种特殊的二叉查找树,在其结点结构中增加一个存储位表示结点的颜色

重要性质:通过遵循对结点着色的某种规则,对于所有从根结点到叶子结点的路径,红黑树确保没有一条路径会比其他路径长出两倍

 

二、红黑树的平衡条件

  1. 每个结点的颜色要么是红色,要么是黑色
  2. 根结点是黑色的
  3. 所有的叶结点都是空结点,并且是黑色的
  4. 如果一个结点是红色的,那么它的孩子结点是黑色的
  5. 从一个结点到其子孙结点的每条路径都包含相同数目的黑色结点

相对于平衡二叉树的平衡条件,该平衡条件较为宽松。虽然这可能导致红黑树的高度较高(仍是logn级别),但相较于平衡二叉树的插入/删除操作带来的频繁旋转,红黑树的插入操作最多进行两次旋转、删除操作最多进行三次旋转。由此可得,插入/删除的效率更好,但查找的效率较低(时间效率仍是O(logn))。

对于红黑树而言,插入、删除、查找的时间复杂度都是O(logn)

 

三、红黑树的应用

红黑树的应用比较广泛,主要是用它来存储有序的数据,它的时间复杂度是O(logn),效率非常高。

  1. C++ STL中的set和map是用红黑树实现的
  2. I/O多路复用的epoll采用红黑树组织管理sockfd,以支持快速的增删改查
  3. Nginx中用红黑树管理定时器,因为红黑树是有序的,可以很快得到距离最小的定时器
  4. Java集合中的TreeSet和TreeMap是用红黑树实现地
  5. Linux虚拟内存的管理,进程的虚拟内存区域都存储在一棵红黑树上,每个虚拟地址区域都对应红黑树的一个结点,该结点的左指针指向相邻的低地址虚拟存储区域,右指针指向相邻的高地址虚拟地址空间

四、插入和删除操作

参考博文:一定让你真正彻底明白红黑树红黑树算法详细介绍

猜你喜欢

转载自www.cnblogs.com/xzxl/p/9572716.html