红黑树是什么,和 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的实现;

浙公网安备 33010602011771号