[数据结构]B树的基本定义和操作

B树、B+树、红黑树的定义、之间的区别、优缺点、数据结构、应用等 B树是一种自平衡的多路搜索树,它可以有多个子节点,不同于二叉树的是,一个节点可以有超过两个的子节点。B树特别适合用于读写相对较大的数据块的存储系统,如磁盘。B+树是B树的变种,所有的值都在叶子节点上并且叶子节点是通过指针连接的这样就提供了对数据的顺序访问。内部节点(非叶子节点)只存储键值,并作为索引使用。红黑树是一种自平衡的二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色,可以是红色或黑色。 阅读详情

B树的定义

  • 多叉搜索树,每个节点最多有M个子树,M-1个关键字
  • 根节点若非唯一节点,则最少有2个子树,即最少有1个关键字
  • 非根节点也非叶子节点的,最少有ceil(M/2)个子树,ceil(M/2)-1个关键字
  • 叶子节点都在树的同一层
  • 每个节点的关键字从小到大排列,充当划分子树的边界
// B树的结构体如下:
typedef struct _btree_node {
	int *keys;
	struct _btree_node **childrens;
	int num;  // 有多少个关键字

	int leaf; // 是否是叶子节点
} btree_node;

typedef struct _btree {
	struct _btree_node *root;
	int t;  // ceil(M/2)-1,方便B树的分裂和合并操作
} btree;

B树的节点生成和销毁

btree_node *btree_node_create(int t, int leaf)
{
	btree_node *node = calloc(1, sizeof(btree_node ));
	node->keys= calloc(2*t-1, sizeof(int));
	node->childrens = calloc(2*t, sizeof(btree_node *));
	node->num = 0;
	node->leaf = leaf;
	return node;
}

void btree_node_destroy(btree_node *node)
{
	free(node->keys);
	free(node->childrens);
	free(node);
}

B树的分裂

void btree_split_child(btree *T, btree_node *x, int idx) {
	btree_node *y = x->childrens[idx];
	int t = T->t;
	btree_node *z = btree_node_create(t, y->leaf);

	for (int i = 0; i < t - 1; i++) {
		z->keys[i] = y->keys[i+t];
	}
	if (y->leaf == 0) {
		for (int i = 0; i < t; i++) {
			z->childrens[i] = y->chiledrens[i+t];
		}
	}
	z->num = t - 1;
	y->num = t - 1;

	for (int i = x->num; i > idx; i--) {
		x->keys[i] = x->keys[i-1];
		x->childrens[i+1] = x->childrens[i];
	}
	x->keys[idx] = y->keys[t-1];
	x->childrens[idx+1] = z;
	x->num += 1;
}

B树的合并

void btree_merge(btree *T, btree_node *x, int idx) {
	btree_node *y = x->childrens[idx];
	btree_node *z = x->childrens[idx+1];

	int t = T->t;
	for (int i = 0; i < t - 1; i++) {
		y->keys[i+t] = z->keys[i];
	}
	y->keys[t - 1] = x->keys[idx];

	if (z->leaf == 0) {
		for (int i = 0; i < t; i++) {
			y->childrens[i+t] = z->childrens[i];
		}
	}
	y->num += t;
	btree_node_destroy(z);

	for (int i = idx + 1; i < x->num; i++) {
		x->keys[i-1] = x->keys[i];
		x->childrens[i] = x->childrens[i+1];
	}
	x->num -= 1;
}

B树详解 数据与结构 B-树:       首先我们需要明确一点:1970年,R.Bayer和E.mccreight提出了一种适用于外查找的树,它是一种平衡的多叉树,称为B树(或B-树、B_树)。所以我们现在所说的B树和B-树其实指的是同一个东西。在这里我们就称它为B树吧。B树的定义、基本概念:       首先我们定义B树的阶:B树中所有节点中孩子节点个数的最大值,通常我们用m表示(m &gt;= 3),成为m阶B树... 阅读详情

相关推荐

二叉树,红黑树,B树,B+树等总结

目录 树 1、定义 2、特点 3、相关术语的概念 二叉树 1、定义 2、图示 ​ 3、二叉树与度为2的有序树的区别: 4、二叉树性质 5、满二叉树 ​6、完全二叉树: 7、 二叉树的删除算法规则 二叉搜索树 AVL树 红黑树 1、定义 2、红黑树性质 3、2-3-4树到红黑树的转换 4、树的旋转 5、红黑树的插入 哈夫曼树 概念1:什么是路径? 概念2:什么是路径长度? 概念3:什么是 结点的带权路径长度? 概念4:什么是 树的带权路径长度? 创建一个.

风铃的博客 1795

数据结构-树(二叉树、红黑、B、B+等)

介绍树、二叉树、B+树等

hello world 1453

数据结构——B树

前言: B树一棵多路平衡二叉树

关注校招求职,微信号:job_campus 2100

【数据结构】解锁B树:从理论到实战的深度剖析

B树是一种自平衡多路搜索树,广泛应用于数据库索引和文件系统。本文系统介绍了B树的基本概念、操作原理及实现方法。首先阐述了B树的定义、阶数选择及其关键性质,强调阶数m对树结构的影响。随后详细讲解了查找、插入和删除三大基本操作的实现规则与步骤,并附以具体示例。在实现部分,提供了节点结构定义和C++代码实现,包括查找、插入、删除等核心函数。复杂度分析表明,B树操作的时间复杂度均为O(logn),空间复杂度为O(n)。最后总结了B树在大数据处理和分布式系统中的应用前景,鼓励进一步研究优化。

大雨淅淅的博客 1200

7. 【B树】定义、操作(查增删)+ 【B+树】的定义、查找 + 【B+树 VS B树】

【B树】定义、操作(查增删)+ 【B+树】的定义、查找 + 【B+树 VS B树】

你说的白是什么白_ 439

7.4考研408数据结构B树与B+树专题深度解析

定义结点结构非叶结点:仅存储索引关键字(子树最大值)叶结点:存储全部关键字及记录指针,并通过链表连接子树关系:非叶结点子树数=关键字数查找路径:所有查找均需到达叶结点核心性质范围查询高效:叶结点链表支持顺序遍历磁盘友好:非叶结点可存储更多索引项,减少I/O次数与B树差异特性B树B+树关键字存储非叶结点存实际数据非叶结点仅存索引叶结点链接无叶结点通过指针链接查找终止位置可能在非叶结点必须到达叶结点易错点索引理解错误:误认为非叶结点存储完整数据范围查询实现。

weixin_73064319的博客 1443

数据库中使用的数据结构:B 树、B+ 树

从B 树、B+ 树、B* 树谈到R 树   第一节、B树、B+树、B*树 1.前言: 动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树(Red-Black Tree ),B-tree/B+-tree/ B*-tree (B~Tree)。前三者是典型的二叉查找树结构,其查找的时间复杂度O

smithdoudou88的专栏 1592

VMware Workstation Pro 17 最新破解版安装教程(附永久激活密钥)

本文详细介绍了VMware Workstation Pro 17专业版的安装与配置指南,包括系统要求检查、官方版本安装流程、高级配置优化及常见问题排查。通过合规使用官方版本,开发者可以充分利用其强大的虚拟化能力,提升多平台开发与测试效率。

weixin_29327977的博客 3548

一文带你入门B树和B+树

B树和B+树,其实在各大论坛平台上总会看到这两个东西。但是他们说的又有种“高手云集”的感觉 —— 他们都会,就我不会,连插嘴的功夫都没有。这篇文章就来简单的讲解一下B树和B+树,下次再遇见这种话题,也不用再尴尬窘迫了。 在解读这两个树之前呢,先解释一下 B-树 这个东西。 其实很多人不敢去了解 B树 的有关内容,为什么呢,一打听这个东西,就有什么 B-树、B树、B+树 ,3个东西!太多了!实际上不是这样。 现在打开百度百科搜索 B树 ,你就会发现,百度百科会直接跳转到 B-树 里。什么意思呢,没错,没有

qq_24251607的博客 796

抖音创作者必备工具!免费一键批量下载无水印视频 + 一键提取抖音视频文案

抖音创作者必备工具!免费一键批量下载无水印视频 + 一键提取抖音视频文案

XiaoqiangClub的博客 3361

YOLOv5算法改进(22)— 更换主干网络MobileNetv3 + 添加CA注意力机制

本节课就让我们结合论文来对YOLOv5进行组合改进(更换主干网络MobileNetv3 + 添加CA注意力机制),小白必学~!🌈

小哥谈 2816

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

1. B树 1. B树的定义 B树也称B-树,它是一颗多路平衡查找树。我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数。当m取2时,就是我们常见的二叉搜索树。 一颗m阶的B树定义如下: 1)每个结点最多有m-1个关键字。 2)根结点最少可以只有1个关键字。 3)非根结点至少有Math.ceil(m/2)-1个关键字。 4)每个结点中的关键字都按照从小到大的顺序排列,每个关键字的左子树中的所有关键字都小于它,而右子树中的所有关键字..

Pinker_Q 564

把 Custom Business Configurations 变成你的定制化维护台:Business Configuration Maintenance Object 设置全解

摘要:SAP BTP的Business Configuration(BCMO)为ABAP环境提供标准化的配置维护方案,通过RAP对象暴露为OData V4服务,自动生成Fiori elements维护界面,省去单独开发应用的成本。关键配置包括:Service Configuration定义业务名称和分组;List Report控制初始加载和视图变体;Object Page配置布局(Tabs/Page)和编辑权限;Table Settings选择表格类型(Grid/Responsive)和创建模式(Inlin

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 171

数据结构之B树

数据结构之B树

weixin_47225948的博客 471

1、掌握 Microsoft Dynamics 365 Business Central 开发全解析

本文全面解析了Microsoft Dynamics 365 Business Central的开发全流程,涵盖开发环境搭建、AL语言扩展开发、定制解决方案实现、高级开发技术、文件与报表处理、打印功能、调试与性能优化、API使用、Azure和Power Platform集成、DevOps实践以及生成式AI应用。同时探讨了开发工具技巧、常见问题解决、开发流程优化、团队协作要点及未来技术趋势,帮助开发者系统掌握Business Central开发核心技能,提升企业级应用开发效率与质量。

food6的博客 110

ADRC自抗扰算法优化(PLC梯形图篇)

ADRC自抗扰算法PLC梯形图完整源代码请参看下面博客文章:ADRC自抗扰控制算法(含梯形图完整源代码和算法公式)_adrc算法_RXXW_Dor的博客-优快云博客PLC的自抗扰控制(ADRC)算法_RXXW_Dor的博客-优快云博客_adrc算法1、自抗扰控制算法,网上很多文章有所讲解,大家也可以关注韩京清教授的论文和书籍,这里就不赘述了,下面给出梯形图+SCL代码。

RXXW_Dor的博客 2282

数据结构之B树详解

B 树是一种高效且可靠的数据结构,适用于大规模数据的存储和管理。其自平衡特性和多路性使其在数据库和文件系统中得到了广泛应用。了解 B 树的基本原理和操作,可以帮助我们更好地设计和优化数据存储解决方案。如有任何问题或需要更深入的内容,请随时询问!

weixin_42282293的博客 645

YOLOv8模型压缩终极方案:LAMP剪枝实战,速度提升不掉点

一个庞大的模型虽然强大,但在实际部署,尤其是资源受限的边缘设备(如无人机、移动电话、嵌入式系统)上,却面临着严峻的挑战:高昂的内存占用、巨大的计算量以及随之而来的高延迟和高能耗。本教程从LAMP剪枝的深刻理论出发,详细解释了它如何通过最小化最坏情况下的L2失真,并借助巧妙的数学简化,最终推导出一种高效、无超参数、层自适应的剪枝策略。它如同为臃肿的模型进行一次精准的“瘦身手术”,通过移除网络中冗余或不重要的权重、神经元甚至整个结构,来显著降低模型的参数量和计算量(FLOPs),从而实现推理加速和资源节约。

LXY_LOVE36的博客 174

26考研——查找_B 树和 B+ 树(7)

26考研408数据结构——查找,持续更新ing

主攻整理408、专升本资料~ 1368

Oracle EBS Tax 四国实现详解:印度、巴西、美国、阿根廷

印度:务必启用India Localization模块,不要尝试用标准EBTax模拟GST逻辑 巴西:必须配置NF-e接口,建议聘请本地税务顾问设置CFOP和NCM代码映射 美国:跨州业务强烈建议购买Vertex或Avalara服务,自建税率表维护成本极高 阿根廷:注意1:1:1架构限制,提前规划Legal Entity和OU结构

金牌架构师 260

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

树、二叉树、平衡二叉树、B树、B+树、红黑树各种常见树总结

树、二叉树、平衡二叉树、B树、B+树、红黑树各种常见树总结基本概念与定义一. 二叉搜索树/查找树(BST:Binary Search Tree)二. 平衡二叉树(AVL树)三. 多路查找树3.2 B树3.3 B+树四. 红黑树 基本概念与定义 树: 树是n个结点的有限集合,有且仅有一个根结点,其余结点可分为m个根结点的子树; 结点的度: 一个结点拥有子树的个数称为度; 树的深度: 树中结点的最大层次成为树的深度或高度; 权(Weight):树中结点的一个有某种意义的实数; 路径长度(Length):树的路径

world_Awhite的博客 795

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

B树简单理解

平衡二叉排序树便于动态查找,因此用平衡二叉排序树来组织索引表是一种可行的选择。当用于大型数据库时,所有数据及索引都存储在外存,因此,涉及到内、外存之间频繁的数据交换,这种交换速度的快慢成为制约动态查找的瓶颈。若以二叉树的结点作为内、外存之间数据交换单位,则查找给定关键字时对磁盘平均进行㏒㏒次访问是不能容忍的(树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下)。 磁盘读取数据

一次次成长的过程 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

m路搜索树,B树,B+树

m路搜索树 定义:一课m路搜索树是一课空树,或者满足以下性质: (1)根节点最多有m棵子树,并具有如下数据结构: n,P0,(K1,P1),(K2,P2),....,(Kn,Pn) 其中n是关键码个数,Pi是指向子树的指针,0&lt;=i&lt;=n&lt;m,Ki是关键码,1&lt;=i&...

宇哥的博客 3218

【B+树】树结构之B+树简介

todo

Eternally123的博客 2872

算法导论 第18章 B树

一、定义 1、B树 B树是为磁盘或其它直接存取辅助存储设备而设计的一种平衡查找树,主要特点是降低磁盘I/O操作次数。 B树以自然的方式推广二叉查找树。 B树的分支因子由磁盘特性所决定。  2、B数的数据结构 int n:当前存储在结点x中的关键字数 key[N]:n个关键,以非降序存放 bool leaf;//TRUE:x是叶子;FALSE:x是内结点 node *child[N

幸福在路上 7964

考研复习之数据结构笔记(十四)查找(中)(动态查找树表:二叉排序树、平衡二叉树、B树、B+树)

二叉排序树或者是一棵空树,或者是具有下列性质的二叉树若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树。二叉排序树是递归定义的。由定义可以得出二叉排序树的一个重要性质中序遍历一棵二叉树时可以得到一个结点值递增的有序序列。图1.1-1二叉排序树举例//二叉排序树的二叉链表存储表示{//关键字项//其他数据项}ElemType;//每个结点的数据域的类型{一棵m阶的B。......

欢迎交流! 1409
上一篇: 【数据结构】红黑树定义及基本操作
下一篇: 【数据结构】Hash
SilentSlot
博客等级 码龄16年 44粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值