B树——插入和删除

B树的插入

5阶B数——结点关键字个数向上取整m/2-1≤n≤m-1

即2≤n≤4

连续插入5个元素后,超出来了。

在插入key后,若导致原结点关键字数超过上限,则从中间位置(m/2向上取整)将其中的关键字分为两个部分,左部分包含的关键字放在原结点中,右部分包含的关键字放在新节点中,中间位置(m/2向上取整)的结点插入原结点的父节点

新元素一定是插入到最底层“终端结点”,用“查找”来确定插入位置

在插入key后,若导致原结点关键字数超过上限,则从中间位置(m/2向上取整)将其中的关键字分为两个部分,左部分包含的关键字放在原结点中,右部分包含的关键字放在新节点中,中间位置(m/2向上取整)的结点插入原结点的父节点,again

若此时导致其父节点的关键字个数也超过了上限,则继续进行这种分裂操作,直至这个过程传到根节点为止,进而导致B树高度增1

核心要求:

①对m阶B树——除根节点外,结点关键字个数m/2向上取整-1≤n≤m-1

②子树0<关键字1小于子树1<关键字2<子树2<。。

新元素一定是插入到最底层“终端结点”,用“查找”来确定插入位置

在插入key后,若导致原结点关键字数超过上限,则从中间位置(m/2向上取整)将其中的关键字分为两个部分,左部分包含的关键字放在原结点中,右部分包含的关键字放在新节点中,中间位置(m/2向上取整)的结点插入原结点的父节点。若此时导致其父节点的关键字个数也超过了上限,则继续进行这种分裂操作,直至这个过程传到根节点为止,进而导致B树高度增1

B树的删除



删除60

若被删除关键字在终端节点,则直接删除该关键字(要注意节点关键字个数是否低于下限m/2向上取整-1)

删除80

找直接前驱后者直接后继

若被删除关键字在非终端节点,则用直接前驱后直接后继替代被删除的关键字

直接前驱:当前关键字左侧指针 所指子树中“最右下”的元素

直接后继:当前关键字右侧指针 所指子树中“最左下”的元素

对非终端节点关键字的删除,必然可以转化为对终端节点的删除操作

低于关键字数下限

删除38

若被删除关键字所在节点删除前的关键字个数低于下限,且与此节点右(或左)兄弟节点的关键字个数还很宽裕,则需要调整该节点、右(或左)兄弟节点及其双亲结点(父子换位法)

其实就是在左右兄弟还很宽裕的时候,用当前结点的前驱(后继)、前驱的前驱(后继的后继)来填补空缺

删除90

左兄弟富裕,借下来

本质:永远保证子树0<关键字1小于子树1<关键字2<子树2<。。

删除49

兄弟不够借?

若被删除关键字所在结点删除前的关键字个数低于下限,且此时与该结点相邻的左、右兄弟结点的关键字个数均=m/2向上取整-1,则将关键字删除后与左(或右)兄弟节点双亲结点中的关键字进行合并

但是73这个位置又不够关键字了。。。

把父节点的扒下来

知识回顾

5阶

B树——插入和删除的更多相关文章

  1. AVL树插入和删除

    一.AVL树简介 AVL树是一种平衡的二叉查找树. 平衡二叉树(AVL 树)是一棵空树,或者是具有下列性质的二叉排序树:    1它的左子树和右子树都是平衡二叉树,    2且左子树和右子树高度之差的 ...

  2. HDU 5687 字典树插入查找删除

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5687 2016百度之星资格赛C题,直接套用字典树,顺便巩固了一下自己对字典树的理解 #include< ...

  3. AVL树的插入与删除

    AVL 树要在插入和删除结点后保持平衡,旋转操作必不可少.关键是理解什么时候应该左旋.右旋和双旋.在Youtube上看到一位老师的视频对这个概念讲解得非常清楚,再结合算法书和网络的博文,记录如下. 1 ...

  4. B+树的插入、删除(附源代码)

    B+ Tree Index B+树的插入 B+树的删除 完整测试代码 Basic B+树和B树类似(有关B树:http://www.cnblogs.com/YuNanlong/p/6354029.ht ...

  5. B树和B+树的插入、删除图文详解

    简介:本文主要介绍了B树和B+树的插入.删除操作.写这篇博客的目的是发现没有相关博客以举例的方式详细介绍B+树的相关操作,由于自身对某些细节也感到很迷惑,通过查阅相关资料,对B+树的操作有所顿悟,写下 ...

  6. B树和B+树的插入、删除图文详解(good)

    B树和B+树的插入.删除图文详解 1. B树 1. B树的定义 B树也称B-树,它是一颗多路平衡查找树.我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数 ...

  7. AVL 树的插入、删除、旋转归纳

    参考链接: http://blog.csdn.net/gabriel1026/article/details/6311339   1126号注:先前有一个概念搞混了: 节点的深度 Depth 是指从根 ...

  8. AVL树(查找、插入、删除)——C语言

    AVL树 平衡二叉查找树(Self-balancing binary search tree)又被称为AVL树(AVL树是根据它的发明者G. M. Adelson-Velskii和E. M. Land ...

  9. HDU_2871 线段树+vecor的中间插入和删除使用

    本来这个题目就是个合并区间的题,就跟Hotel一样,要插入一段,则找左孩子 合并后的中间区间 右孩子,但是比较恶心的是,他需要实时得到某一段的起终点,或者某个点在第几个段里面,我想过在线段树里面加入几 ...

随机推荐

  1. ArrayList和LinkedList 的联系和区别

    ArrayList和LinkedList 的联系和区别 1.联系: 都实现了List接口 有序 不唯一(可重复) 2.区别 ArrayList LinkedList

  2. docker 国内源切换加速

    阿里云比较好: 地址: https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

  3. Camtasia中对给录制的视频添加视觉效果

    视频创作和后期剪辑对很多人来说是一件很头痛的事,对着屏幕一段一段.一帧一帧的进行调整会让人十分的心烦,有时花费了大量时间剪出来的视频质量却不高,让人有一种想砸键盘的冲动. 这种问题,除非是原视频素材质 ...

  4. Mac电脑数据被误删了怎么办,还能恢复吗

    随着苹果产品的使用率越来越高,苹果电脑视频丢失的风险也是居高不下,大部分情况下都是由于误操作或者是中病毒导致视频丢失,苹果电脑视频恢复可以实现吗?涉及到文件恢复的问题,找EasyRecovery文件恢 ...

  5. Java基础教程——内部类

    内部类 内部类(inner class)是定义在另一个类中的类 内部类的好处: |--1.隐藏机制:内部类封装性更好,隐藏在一个类之中,同一包中的其他类也不能访问 |--2.内部类可以访问外围类的私有 ...

  6. JUC详解--【Foam番茄】

    1.什么是JUC java.util 工具包 业务:普通的线程代码 Thread Runnable 没有返回值,效率相比于 Callable 相对较低! 2.线程和进程 进程:一个程序,QQ.exe ...

  7. 单例模式与它的七种java实现方式

    定义 单例模式是一个比较简单的模式,其定义如下: 确保某一个类只有一个实例,而且自行实例化,并向整个系统提供这个实力. 优点: 1.由于单例模式在内存中只有一个实例,减少了内存开支,特别是一个对象需要 ...

  8. 「刷题笔记」LCA问题相关

    板子 ll lg[40]; ll dep[N],fa[N][40]; ll dis[N]; void dfs(ll u,ll f) { dep[u]=dep[f]+1; fa[u][0]=f; for ...

  9. Beta冲刺随笔——测试

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 团队进行Alpha冲刺 作业正文 正文 其他参考文献 无 ...

  10. 冰河开源了全网首个完全开源的分布式全局有序序列号(分布式ID)框架!!

    写在前面 mykit-serial框架的设计参考了李艳鹏大佬开源的vesta框架,并彻底重构了vesta框架,借鉴了雪花算法(SnowFlake)的思想,并在此基础上进行了全面升级和优化.支持嵌入式( ...