B树插入和删除的各种情况分析
1.b树的定义
b树是一种平衡的多路查找树,他在文件系统很有用。
一颗m阶的B树,或为空树,或者满足依稀阿特性的M叉树;
- 每个结点至多拥有M课子树
- 根结点至少拥有两颗子树
- 除了根结点以外,其余每个分支结点至少拥有M/2课子树
- 所有的叶结点都在同一层上
- 有k课子树的分支结点则存在k-1个关键字,关键字按照递增顺序进行排序
- 关键字数量满足ceil(M/2)-1 <= n <= M-1
2.B树的数据结构
//这样子定义阶,阶是偶数,key的数量就是奇数了,方便分裂的时候找到最中间的key
#define M 4 //阶为2M
#define KEY_NUM (2 * M - 1) //key的数量typedef int type_t;typedef struct btree_t
{int num; /* number of keys */char leaf; /* if or not is a leaf */type_t key[KEY_NUM];struct btree_t* child[KEY_NUM + 1];
}btree_t, btnode_t;
3.插入的情况分析
1)根据要插入的key的值,找到叶子结点并插入。
2)判断当前结点key的个数是否小于等于m-1,若满足则结束,否则进行第3步。
3)以结点中间的key为中心分裂成左右两部分,然后将这个中间的key插入到父结点中,这个key的左子树指向分裂后的左半部分,这个key的右子支指向分裂后的右半部分,
4)然后将当前结点指向父结点,继续进行第2步,直到结束。
4.删除的情况分析
1)如果当前需要删除的key位于非叶子结点上,则寻找后继key来覆盖要删除的key,当前需要删除的节点指向后继key。
2)当前结点key个数大于等于Math.ceil(m/2)-1,结束删除操作,否则执行第3步。
3)如果左边兄弟结点key个数大于Math.ceil(m/2)-1,则父结点中的key下移到该结点,兄弟结点中的一个key上移,删除操作结束,否则执行第4步。
4)如果右边兄弟结点key个数大于Math.ceil(m/2)-1,则父结点中的key下移到该结点,兄弟结点中的一个key上移,删除操作结束,否则执行第5步。
5)这时候左边兄弟节点和右边兄弟节点肯定有一个等于Math.ceil(m/2)-1,可以将父结点中的key下移与当前结点及它的兄弟结点中的key合并,形成一个新的结点。原父结点中的key的两个孩子指针就变成了一个孩子指针,指向这个新结点。然后当前结点的指针指向父结点。(注意:将父结点下移,则父节点少了一个节点,就是相当于删除了一个父节点。)
6)重复上面的第2步。
B树插入和删除的各种情况分析相关推荐
- 红黑树插入和删除的各种情况分析
1.红黑树的定义 红黑树是一种自平衡的二叉查找树,是一种高效的查找树,定义如下: 每个节点是红色或黑色 根是黑色 所有叶子都是黑色(叶子是NIL节点) 如果一个节点是红色的,则他的两个儿子是黑色的(从 ...
- B树、B+树—插入,删除,查询
一.B树 1.插入 在B树中插入关键码key的思路: 对高度为h的m阶B树,新结点一般是插在第h层.通过检索可以确定关键码应插入的结点位置.然后分两种情况讨论: 1. 若该结点中关键码个数小于m-1, ...
- 一种基于平衡二叉树(AVL树)插入、查找和删除的简易图书管理系统
目录 1. 需求分析 2. 项目核心设计 2.1 结点插入 2.2 结点删除 3 测试结果 4 总结分析 4.1 调试过程中的问题是如何解决的,以及对设计与实现的回顾讨论和分析 4.2 算法的时间和空 ...
- 链表的特点,单链表的定义、存储结构,单链表的基本操作(判断链表是否为空、销毁链表、清空链表、求链表表长、查找、插入、删除,建立单链表)
目录 一.链表(链式存储结构)的特点 二.单链表的定义和表示 1.带头结点的单链表 2.单链表的存储结构 三.单链表基本操作的实现 1.单链表的初始化(带头结点的单链表) 2.补充单链表的几个常用简单 ...
- 目录树 删除 数据结构_数据结构:B树和B+树的插入、删除图文详解
B树 1.1B树的定义 B树也称B-树,它是一颗多路平衡查找树.我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数.当m取2时,就是我们常见的二叉搜索树. ...
- 数据结构:B树和B+树的插入、删除图文详解
目录 B树 1.1B树的定义 1.2B树的插入操作 1.3B树的删除操作 B+树 2.1 B+树的定义 2.2 B+树的插入操作 2.3 B+树的删除操作 B树 1.1B树的定义 B树也称B-树,它是 ...
- 快速了解B+树的插入、删除操作
B+树非常的复杂,这里不进行详细的讲解,只对基本的插入删除操作进行说明. 在B+树中,所有记录节点都是按键值的大小顺序存放在同一层的叶节点中,各叶节点用指针连接.因此在进行插入删除操作时,要进行调整, ...
- 浅析B树、B+树插入删除操作(附代码实现)
首先自平衡树是为了解决二叉搜索树在有序数据中退化为链表的问题(即查找时间退化为 O(n) 级别). 自平衡树中,B树.B+树可以说是最简单的,没有旋转.变色等操作.我们可以拿多路平衡查找树和同样是自平 ...
- 【数据结构】m阶B树的特点、插入 和 删除
预备知识:你需要知道什么是二叉搜索树. 一.m 阶 B 树的特点 在严蔚敏的<数据结构>一书中,说"一棵m阶的B树,或为空树,或为满足下列特征的m叉数.如下: 1.每个节点至多有 ...
最新文章
- scala函数式编程(二) scala基础语法介绍
- 一次心惊肉跳的服务器误删文件的恢复过程
- Jquery的html方法里包含特殊字符的处理,类似双引号之类的
- 最强一句话大全 www.sh3llc0de.com
- 花匠(东方化改题+无题解)
- php中生成标准uuid(guid)的方法
- JFinal model简单包装,版本2
- 开发一款自动指向特定页面元素的jQuery插件:jQuery PointPoint
- tplink-wr841n无线路由接入到局域网三层交换机方法
- 网站选择按钮点击无反应?_Win10系统电脑鼠标左键单击没有反应的解决办法
- 【Qt for Python官方教程】使用pyside6-rcc引入.qrc文件
- 如何运用量化策略跑赢大盘?
- kindle安装插件和koreader
- 数据管理与数据库 大学课程_根据数据显示的50种最佳免费在线大学课程
- 一度智信:电商平台商品定价策略
- Oracle 18c十大新特性
- Android ApiDemos示例解析(110):Views-Data Widgets-1. Dialog
- linux hase数据,Linux取得Redis数据库中hash类型的所有feild或者所有value
- Echarts官方文档
- QT 自定义加载等待(Loading)提示框