Java数据结构——红黑树

二叉树:查找时间复杂度:最好:O(lgn),最差O(n)。最差情况是所有的数据全部在一端时。

二叉搜索树(二叉排序树、二叉查找树):查找时间复杂度:最好:O(lgn),最差O(n)。最差情况是所有的数据全部在一端时。

平衡二叉树:查找时间复杂度:O(lgn)

红黑树:查找删除插入时间复杂度:O(lgn)  红黑树是一种自平衡的二叉排序树,它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(logn)时间内做查找,插入和删除,这里的n是树中元素的数目。

 

红黑树(一棵自平衡的排序二叉树)五大特性:

1)每个结点要么是红的,要么是黑的。 

2)根结点是黑的。 

3)每个叶结点,即空结点是黑的。 

4)如果一个结点是红的,那么它的俩个儿子都是黑的。 

5)对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点。

 

场景

1)广泛用于C++的STL中,map和set都是用红黑树实现的.

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

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

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

5)java中的TreeSet,TreeMap

 

posted @ 2016-03-02 21:54  tonglin0325  阅读(424)  评论(0编辑  收藏  举报