学习自
https://zhuanlan.zhihu.com/p/27700617
平衡二叉树
B树
(图中示例为m=3阶)
每个节点(除了根节点)有:2<=k<=m个子节点
关键字?
叶子节点都在同一层
如果一个非叶节点有n个子节点,那么这个非叶节点存放的关键字数有n-1个。
3、8、31、11、23、29、50、28怎么构建出一个5阶树呢?
关键字数:3<=k<=4
一旦关键字数小于3就要进行合并,关键字数大于4就要进行拆分
最后的这个合并,其实是先进行右下角的5个的拆分,拆分成
这种形式,但是不满足非根节点的关键字数目限制,然后就向上合并了。
删除
关键字数小于二时先从子节点取,子节点没有符合条件时就向向父节点取,取中间值往父节点放
B+树
比之B树的优点:
1.更稳定
2.查找效率更高,充分地利用了节点的空间
叶子节点存放所有的关键字及关键字记录的指针(也就是我们存放的数据)。
所有父节点,都只是存放孩子的索引,并非关键字指针。所以父节点的作用就是让你正确地找到孩子。
B*树
他是B+树的变种,但是
1.B*树的关键字个数最小为 2/3m向上取整
2. B*树节点满时会检查兄弟节点是否满(因为每个节点都有指向兄弟的指针),如果兄弟节点未满则向兄弟节点转移关键字,如果兄弟节点已满,则从当前节点和兄弟节点各拿出1/3的数据创建一个新的节点出来。向兄弟节点转移关键字的特性使得B*树额分解次数变得更少。