二叉树
特点:根节点 左边都是比根值小
根节点 右边都是比根值大
缺点:节点无限深,访问的时候就是n 无限深
平衡二叉树
1 拥有二叉树的特点
2 树的任何节点的子树深度相差不超过1
b-tree
B Tree 是一个绝对平衡树,所有的叶子节点在同一高度
每个节点保存的关键字的个数和路数关系为:
关键字个数 = 路数 – 1。
任何一个关键字出现且只出现在一个结点中;
关键字集合分布在整颗树中;
任何一个关键字出现且只出现在一个结点中;
搜索有可能在非叶子结点结束;
其搜索性能等价于在关键字全集内做一次二分查找;
自动层次控制;
1、每个节点最多拥有m个子树
2、根节点至少有2个子树
3、分支节点至少拥有m/2颗子树(除根节点和叶子节点外都是分支节点)
4、所有叶子节点都在同一层、每个节点最多可以有m-1个key,并且以升序排列
B+Tree
叶子节点存储信息
平衡了树的高度和宽度
B TREE和B+TREE区别是什么?
1、B+TREE 关键字的搜索采用的是左闭合区间,之所以采用左闭合区间是因为他要最好的去支持自增id,这也是mysql的设计初衷。即,如果id = 1命中,会继续往下查找,直到找到叶子节点中的1。
2、B+TREE 根节点和支节点没有数据区,关键字对应的数据只保存在叶子节点中。即只有叶子节点中的关键字数据区才会保存真正的数据内容或者是内容的地址。而在B树种,如果根节点命中,则会直接返回数据。并且在B+TREE中,叶子节点不会去保存子节点的引用。
3、B+TREE叶子节点是顺序排列的,并且相邻的节点具有顺序引用的关系,如上图中叶子节点之间有指针相连接。