红黑树是什么,和 AVL 树有什么区别

红黑树是一种自平衡的二叉查找树。

1.每个结点是红色或者黑色的。

2、根结点是黑色的。

3、每个空结点(NULL/NIL)是黑色的。(这里将空结点作为一个特殊的结点对待,设定他们必须是黑色的。)

4、如果一个结点是红色的,则它的左右子结点都必须是黑色的。(但黑色结点的子结点可以是黑色的。)

5、对任意一个结点来说,从它到空结点的所有路径必须包含相同数目的黑色结点。

区别:和红黑树相比,AVL树是严格的平衡二叉树,平衡条件必须满足(所有节点的左右子树高度差不超过1)。通过对任何一条从根到叶子的路径上各个节点着色的方式的限制,红黑树确保没有一条路径会比其它路径长出两倍,因此,红黑树是一种弱平衡二叉树(由于是弱平衡,可以看到,在相同的节点情况下,AVL树的高度低于红黑树)。

应用:

1. 广泛用于C ++的STL中,map是用红黑树实现的;

2. Linux的的进程调度,用红黑树管理进程控制块,进程的虚拟内存空间都存储在一颗红黑树上,每个虚拟内存空间都对应红黑树的一个节点,左指针指向相邻的虚拟内存空间,右指针指向相邻的高地址虚拟内存空间;

3. IO多路复用的epoll采用红黑树组织管理sockfd,以支持快速的增删改查;

4. Nginx中用红黑树管理定时器,因为红黑树是有序的,可以很快的得到距离当前最小的定时器;

5. Java的TreeMap的实现;

posted @ 2021-08-09 09:08  holmes_now  阅读(274)  评论(0)    收藏  举报