B树和B+树的总结

一个B树上的节点,最多包含(2m-1)个插入的数据,这些数据可以构成2m个区间,所以个节点最多
2m个孩子,也可以没有孩子,没有孩子的节点为叶子节点。
插入
1.插入一个数据key
2.如果目前的节点是叶子节点,则根据关键字大小直接插入到关键字列表里面,如果碰到某个节点关键字的数量等于2m-1,则分裂节点
3.如果目前的节点是内部节点,则根据关键字大小找到适合存放当前关键字的孩子节点,进入到孩子节点,继续步骤2


删除 key
1.寻找key是否在当前B树中,如果在记录其所在节点和索引,如果不在则直接返回
2.删除该节点
  1.如果是孩子节点则直接删除,并且移动关键字位置,填补删除的关键字。
  2.如果是内部节点 要注意当前节点关键字数量为0的情况
     1.如果要删除的关键字前面的那个孩子节点的关键字数量大于m-1则把孩子节点最后一个关键字赋值给要删除的节点,之后删除变为删除孩子节点最后一个关键字
     2.如果第一步不成立,但是要删除的关键字后面的孩子节点的数量大于m-1,则把孩子节点第一个关键字赋值给要删除的节点,之后删除变为删除孩子节点第一个关键字
     3.如果前面都不成立,则把要删除的关键字和后面孩子合并到前面的孩子,之后删除变为在前面的孩子删除关键字。


和B+树的区别在于,B+树的非叶子结点只包含导航信息,不包含实际的值,所有的叶子结点和相连的节点使用链表相连,便于区间查找和遍历。


B+ 树的优点在于:


由于B+树在内部节点上不包含数据信息,因此在内存页中能够存放更多的key。 数据存放的更加紧密,具有更好的空间局部性。因此访问叶子节点上关联的数据也具有更好的缓存命中率。
B+树的叶子结点都是相链的,因此对整棵树的便利只需要一次线性遍历叶子结点即可。而且由于数据顺序排列并且相连,所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历。相邻的元素可能在内存中不相邻,所以缓存命中性没有B+树好。
但是B树也有优点,其优点在于,由于B树的每一个节点都包含key和value,因此经常访问的元素可能离根节点更近,因此访问也更迅速
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值