热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

B树为什么具有相同的深度?

B树的分裂行为导致了B树具有相同的深度。不过要清楚的知道这一点,要从节点从0到节点变满,到第一次有分层,知道深度不断增大的流程开始

B树的分裂行为导致了B树具有相同的深度。不过要清楚的知道这一点,要从
节点从0到节点变满,到第一次有分层,知道深度不断增大的流程开始,直接上图:

首先是一个空的根节点:

空节点

然后第一次有了第一个关键字:
在这里插入图片描述

由于其节点元素大小不是我的观察重点,所以用e代替,用\代表空

假如我们的B树最小度数为t,那么一直插入关键字的话:
先根节点称为一个满节点:

在这里插入图片描述
------------------------ 【1-a】 3个关键字,所有孩子为空--------------------------

在这里插入图片描述

------------------------ 【1-b】 2t-2个关键字关键字,所有孩子为空。--------------
当节点存在2t-2个关键字时,其处在一个临近分裂的状态,节点在此环境下,
再插入一个关键字,B树为了方便后续插入,即防止分裂向上传播,会将其
预分裂。
分裂行为如下,插入了一个关键字,节点满了2t-1个。(此节点为合法B树节点)
在这里插入图片描述

在这里插入图片描述

继续不断地添加节点,其中只要当第二层的某个节点等于2t-1关键字,其就会给父节点增加一个关键字。(这样做实际上维持了父节点关键字个数n,具有n+1孩子的性质)

在这里插入图片描述

最终子节点不断增多,第一层根节点又有2t-1个了,根节点也要分裂不过这次多少不一样,它的孩子域下有子代的,此时的分裂带有子代分裂。

在这里插入图片描述

再次观察分裂细节(把上面的根节点放大),此时根节点开始分裂:

在这里插入图片描述
其中每个椭圆都是具有t-1个关键字叶子节点。
这种分裂都是按这种方式进行,其实现在就很好理解为什么叶子节点深度相同。因为B树不像二叉树一样在叶子节点的下面插入,而是就是插入到叶子节点,这样叶子节点如果有空间,就插了,没有空间,就分裂成两个相同深度的叶子节点,如果父节点也满了,会继续父节点也分裂,直到满足存储需求,如果到根节点还没满足,就新建一个根节点,将原来父节点分裂,深度加一层。而原来父节点是两个子代域具有相同深度,相同深度的两个子代域连接一个父节点,保证其后叶子节点深度相同。
因此,空间够不够深度都不变,一开始深度相同,那深度就一致相同了。


推荐阅读
  • 三角测量计算三维坐标的代码_双目三维重建——层次化重建思考
    双目三维重建——层次化重建思考FesianXu2020.7.22atANTFINANCIALintern前言本文是笔者阅读[1]第10章内容的笔记,本文从宏观的角度阐 ... [详细]
  • 微信小程序详解:概念、功能与优势
    微信公众平台近期向200位开发者发送了小程序的内测邀请。许多人对微信小程序的概念还不是很清楚。本文将详细介绍微信小程序的定义、功能及其独特优势。 ... [详细]
  • 本章介绍了TCP/IP协议族中的链路层,其主要功能是为IP模块发送和接收IP数据报。链路层还支持一些辅助性协议,如ARP。此外,本文详细探讨了不同类型的链路层技术及其应用。 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 命令模式是一种行为设计模式,它将请求封装成一个独立的对象,从而允许你参数化不同的请求、队列请求或者记录请求日志。本文将详细介绍命令模式的基本概念、组件及其在实际场景中的应用。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 本文介绍了如何利用 `matplotlib` 库中的 `FuncAnimation` 类将 Python 中的动态图像保存为视频文件。通过详细解释 `FuncAnimation` 类的参数和方法,文章提供了多种实用技巧,帮助用户高效地生成高质量的动态图像视频。此外,还探讨了不同视频编码器的选择及其对输出文件质量的影响,为读者提供了全面的技术指导。 ... [详细]
  • 20款必备PS插件免费大放送,附详细安装指南
    对于众多关注小资源并学习PS的用户来说,每次分享设计素材都会收到大量反馈。为了更好地满足大家的需求,今天我们特别推出了20款必备的PS插件大合集,并附有详细的安装指南,确保每位用户都能轻松上手,提升设计效率。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 开发日志:高效图片压缩与上传技术解析 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 在项目开发中,我们搭建了私有的Maven仓库服务器,以方便管理和下载所需的JAR包。然而,某些外部JAR包可能无法从公共Maven仓库获取,或者我们自行开发了一些仅供公司内部使用的插件,这些都需要上传到私有仓库中进行共享。本文详细介绍了如何使用Maven命令行工具将这些第三方JAR包部署至Nexus仓库服务器,确保团队成员能够轻松访问和使用这些资源。 ... [详细]
  • Python应用实例大揭秘:七大令人惊叹的高阶技巧展示
    2020年,Python无疑成为了最炙手可热的编程语言,其影响力已远远超出程序员的范畴。从初学者到资深从业者,甚至小学生,都在纷纷加入Python的学习热潮中。凭借其低门槛、易上手和强大的功能,Python正逐渐成为各行业不可或缺的工具。本文将揭示七个令人惊叹的Python高级应用技巧,帮助读者进一步提升编程水平。 ... [详细]
  • 2.2 组件间父子通信机制详解
    2.2 组件间父子通信机制详解 ... [详细]
  • 类加载机制是Java虚拟机运行时的重要组成部分。本文深入解析了类加载过程的第二阶段,详细阐述了从类被加载到虚拟机内存开始,直至其从内存中卸载的整个生命周期。这一过程中,类经历了加载(Loading)、验证(Verification)等多个关键步骤。通过具体的实例和代码示例,本文探讨了每个阶段的具体操作和潜在问题,帮助读者全面理解类加载机制的内部运作。 ... [详细]
author-avatar
手机用户2502855967
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有