1.B树的总结
https://blog.csdn.net/qq_32924343/article/details/80167184
1.关于根节点
根节点要么没有儿子,[2, m]个儿子
2.其他节点要么没有儿子,要么[m/2向上取整, m]个儿子
3.每个节点中的key个数
m/2向上取整-1 <= key <= m-1
插入:
节点中key的数目过大:
1.分裂2.将中间节点拆分后合并到父节点3.父节点继续调整
删除
删除可能导致key的数目过小
删除非叶子结点:直接找后继结点,然后用删除叶子结点的方法
删除叶子结点方法:先找兄弟 再找爸爸 最后合并,爸爸有问题了,重复这一步
简而言之,总会用到删除叶子结点的方法
现在要删除120
1.122移动到120,删除122
2.130移动到122,删除130,之后合并
3.122移动到130,合并
2. B+树的总结
1.根节点[2, m]个儿子
2.其他节点[m/2向上取整, m]个儿子
3.关键字数和儿子数相同
插入
和B树的区别在于合并分裂时把中间节点保留了一份(下图的m=4)
插入数据7
删除
直接删除叶子结点,直接采用找兄弟找爸爸再合并
删除9呢
找爸爸再合并
3.B+树和B树的区别
1.关键字
B+树的关键字和子树个数一样
B树的关键字个数比子树少1
2.叶子结点
B+树的叶子结点有关键字和指针,并且叶子结点之间顺序连接
B+树的叶子结点有只有部分关键字和指针,并且叶子结点无连接
3.非叶子结点
B+树的非叶子结点没有关键字信息
B树的叶子结点有关键字信息和指针
4. 非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树
(B树是开区间) 左闭右开