1、二叉查找树 Binary Search Tree
特点:右子节点的数据要比根节点的大,左子节点的数据比根节点小,特殊情况下会变成一个链表。
二叉搜索树其期望高度(即为一棵平衡树时)为log2n,其各操作的时间复杂度(O(log2n))同时也由此而决定。但是,在某些极端的情况下(如在插入的序列是有序的时),二叉搜索树将退化成近似链或链,此时,其操作的时间复杂度将退化成线性的,即O(n)。
2、平衡二叉树,Balanced binary search Tree
平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。 最小二叉平衡树的节点总数的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci(斐波那契)数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。
平衡二叉搜索树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。在平衡二叉搜索树中,我们可以看到,其高度一般都良好地维持在O(log(n)),大大降低了操作的时间复杂度。
3、多路平衡查找树(B-Tree)
m阶的B树满足以下性质:
(1)每个节点最多拥有m个子树
(2)根节点最少有2个子树
(3)分支节点最少拥有m/2棵子树
(4)所有叶节点都在同一层,每个节点最多有m-1个key,并且以升序排列
4、加强版的多路查找树(B+ Tree)
(1)B+跟B树不同B+树的非叶子节点不保存关键字记录的指针,这样使得B+树每个节点所能保存的关键字大大增加;
(2)B+树叶子节点保存了父节点的所有关键字和关键字记录的指针,每个叶子节点的关键字从小到大链接;
(3)B+树的根节点关键字数量和其子节点个数相等;
(4)B+的非叶子节点只进行数据索引,不会存实际的关键字记录的指针,所有数据地址必须要到叶子节点才能获取到,所以每次数据查询的次数都一样;
mysql中使用B+树来做索引,更加符合业务场景,查询时经常需要排序或查询多条数据,这样B+树索引是有序的,并且有链表相连,是的他的查询效率就快了很多;而且数据库的索引一般存储在磁盘上,数据量大的时候无法一次性装入内存,B+树的设计可以进行分批加载,从而避免内存溢出,减少内存使用,同时可以降低树的高度,提高查询效率。
B+树是B-树的变种(PLUS版)多路绝对平衡查找树,他拥有B-树的优势
B+树扫库、表能力更强
B+树的磁盘读写能力更强
B+树的排序能力更强
B+树的查询效率更加稳定(仁者见仁、智者见智)