排序二叉树、AVL树、红黑树、B树、B+树

1. 排序二叉树linux

排序二叉树是一种特殊结构的二叉树,能够很是方便地对树中全部节点进行排序和检索。nginx

排序二叉树要么是一棵空二叉树,要么是具备下列性质的二叉树:sql

  • 若它的左子树不空,则左子树上全部节点的值均小于它的根节点的值;
  • 若它的右子树不空,则右子树上全部节点的值均大于它的根节点的值;
  • 它的左、右子树也分别为排序二叉树

图 1 显示了一棵排序二叉树:数据库

 

图 1. 排序二叉树windows

对排序二叉树,若按中序遍历就能够获得由小到大的有序序列。如图 1 所示二叉树,中序遍历得:数据结构

{2,3,4,8,9,9,10,13,15,18}

 

二、AVL树:code

平衡二叉树,通常是用平衡因子差值决定并经过旋转来实现,左右子树树高差不超过1,那么和红黑树比较它是严格的平衡二叉树,平衡条件很是严格(树高差只有1),只要插入或删除不知足上面的条件就要经过旋转来保持平衡。因为旋转是很是耗费时间的。咱们能够推出AVL树适合用于插入删除次数比较少,但查找多的状况。blog

应用:排序

相对其余数据结构比较少。windows对进程地址空间的管理用到了AVL树。
 索引

三、红黑树:

平衡二叉树,经过对任何一条从根到叶子的简单路径上各个节点的颜色进行约束,确保没有一条路径会比其余路径长2倍,于是是近似平衡的。因此相对于严格要求平衡的AVL树来讲,它的旋转保持平衡次数较少。用于搜索时,插入删除次数多的状况下咱们就用红黑树来取代AVL。

应用:

·        普遍用在C++的STL中。map和set都是用红黑树实现的。

·        著名的linux进程调度Completely Fair Scheduler,用红黑树管理进程控制块。

·        epoll在内核中的实现,用红黑树管理事件块

·        nginx中,用红黑树管理timer等

·        Java的TreeMap实现
 

四、B树,B+树:

        它们特色是同样的,是多路查找树,通常用于数据库中作索引,由于它们分支多层数少,由于磁盘IO是很是耗时的,而像大量数据存储在磁盘中因此咱们要有效的减小磁盘IO次数避免磁盘频繁的查找。
B+树是B树的变种树,有n棵子树的节点中含有n个关键字,每一个关键字不保存数据,只用来索引,数据都保存在叶子节点。是为文件系统而生的。

        B+树相对B树磁盘读写代价更低:由于B+树非叶子结点只存储键值,单个节点占空间小,索引块可以存储更多的节点,从磁盘读索引时所需的索引块更少,因此索引查找时I/O次数较B-Tree索引少,效率更高。并且B+Tree在叶子节点存放的记录以链表的形式连接,范围查找或遍历效率更高。Mysql InnoDB用的就是B+Tree索引。