对于B +树插入,为什么要遍历树然后再向上分裂父母?
Wikipedia建议使用这种插入方式:
执行搜索以确定新记录应该去哪个存储桶 成。
- 如果存储桶未满(插入后最多b-1个条目),请添加记录。
- 否则,拆分桶。
- 分配新叶子并将桶的一半元素移动到新桶中。
- 插入新的叶子 最小的密钥和地址进入父级。
- 如果父母已满,请将其拆分。
- 将中间键添加到父节点。
- 重复,直到找到不需要拆分的父级。
如果根分裂,则创建一个具有一个密钥和两个密钥的新根 指针。
为什么你会向下遍历树然后再回来执行分裂?为什么不在中途遇到节点时拆分节点?
对我而言,提议的方法执行两次工作,并且还需要更多的簿记。
任何人都可以解释为什么这是首选的插入方法,而不是拆分方式,以及在遍历期间插入的缺点是什么?
答案 0 :(得分:2)
你必须回溯树,因为你实际上知道是否需要在最低级别进行拆分,直到你到达那里。
在“如果水桶不满,......”这句话中就是全部。
你还应该意识到它的工作量远不及两倍。由于你在记忆中记住各种各样的东西(节点指针,节点内的索引等等),所以在备份的路上没有那么多的计算或搜索。