主题 1964|帖子 1964|积分 5892
您需要 登录 才可以下载或查看,没有账号?立即注册
B+树是一棵多叉排序树,即每个非叶子节点可以包含多个子节点,其整体结构呈扁平化,所以其非常适配于数据库和操作系统的文件系统中。且B+树能够保持数据的稳定有序,插入和删除都拥有较稳定的对数时间复杂度。
B+树的插入操作仅在叶子节点进行: 若为空树,则创建一个叶子节点,该叶子节点同时也是根节点,插入操作结束; 根据插入的 key 值,找到应该在的叶子节点插入; 若插入后叶子节点个数符合要求即小于m,则插入结束 若插入后叶子节点个数不符合要求即大于等于m,将该节点分裂成两半,则判断当前叶子节点是否为根节点 若当前叶子节点为根节点,则构建一个新的root节点,指向分裂后的两个子节点 若当前叶子节点不为根节点,则在父节点处添加一个新的子节点,新子节点则存储原节点一半的值,并循环向上判断中间节点是否满足要求
B+树的删除操作仅在叶子节点进行: 若删除后,叶子节点中的索引个数仍然满足要求即大于等于Math.ceil(m / 2)时,将该叶子节点的其他索引左移一位,删除结束; 若删除后,叶子节点中的索引个数不满足最低要求,则查询左右兄弟节点: 若左/右兄弟节点中索引个数大于Math.ceil(m / 2),则从左/右兄弟节点中移动一个索引项到当前叶子节点中,并修改父节点的索引值,删除结束 若左/右兄弟节点中索引个数等于Math.ceil(m / 2),则将左/右节点与当前节点合并,修改父节点的索引记录,并向上逐级判断内部节点是否因为页合并导致索引项不满足最低要求,删除结束
使用道具 举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
河曲智叟