B树详解

B树系列文章

1. B树-介绍

2. B树-查找

3. B树-插入

4. B树-删除

什么是B树

B树(英语:B-tree)是一种自平衡的,能够保持数据有序。
使用B树这种数据结构,可以在 对数时间范围内完成对数据的查找、插入和删除操作。
B树减少定位记录时所经历的中间过程,从而加快存取速度。
因此B树可应用于数据库和文件系统的实现

B树有什么特性

一棵m阶B树有如下属性(m >= 2)

  • 每一个结点最多有m个子结点
  • 每一个非叶子结点(除根结点)最少有 ⌈ m/2⌉ 个子结点
  • 如果根结点不是叶子结点,那么它至少有两个子结点
  • 有k个子结点的非叶子结点拥有 k − 1 个键
  • 所有的叶子结点都在同一层
  • 结点内键值有序排列,
  • 以父结点中某个键作为分隔值,该分隔值与左右儿子结点的键值的构成排列也是有序的

下图是一棵3阶B树,

取该B树父结点中某个键作为分隔值

该分隔值的左儿子结点的键值均小于该分隔值,右儿子结点的键值均大于该分隔值

B树详解

图一 3阶B树

根据B树的定义及特性,定义B树结点的基本数据结构,这里多加了一个限制,即 键不会重复

每个B树结点都包含了键值列表和儿子结点列表,默认键值按升序排列

// 非并发安全
type BTree struct {
    m    int // 阶数
    root *BTreeNode
}

type BTreeNode struct {
    isLeaf   bool  // 是否为叶子结点
    keyNum   int   // key个数
    keyList  []int // key 有序
    leafList []*BTreeNode
}

完整代码

B树完整代码

参考

B-tree

B树-维基百科

Original: https://www.cnblogs.com/amos01/p/16488667.html
Author: Amos01
Title: B树详解

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611210/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • innoDB对MVCC的实现

    InnoDB存储引擎在 RR 级别下通过 MVCC和 Next-key Lock 来解决幻读问题: 1、执行普通 select,此时会以 MVCC 快照读的方式读取数据 在快照读的…

    数据库 2023年6月16日
    084
  • java Activiti 工作流引擎 SSM 框架模块设计方案

    工作流模块 1.模型管理 :web在线流程设计器、预览流程xml、导出xml、部署流程 2.流程管理 :导入导出流程资源文件、查看流程图、根据流程实例反射出流程模型、激活挂起 3….

    数据库 2023年6月6日
    098
  • Java面试题(二)–MySQL

    1 存储引擎 1、简单描述一个Mysql的内部结构? MySQL的基本架构示意图:大体来说,MySQL可以分为 server层和 存储引擎层两部分。 ① server层包括连接器、…

    数据库 2023年5月24日
    089
  • MySQL数据备份 mysqldump 详解

    MySQL数据备份流程 打开cmd窗口 通过命令进行数据备份与恢复; 需要在Windows的命令行窗口中进行; l 开始菜单,在运行中输入cmd回车; l 或者win+R,然后输入…

    数据库 2023年6月14日
    074
  • 位图的简单操作

    class BitMap { private byte[] words;//用一个字节数&#x7…

    数据库 2023年6月14日
    0131
  • 部署前后端为独立的 Docker 节点

    在『服务器部署 Vue 和 Django 项目的全记录』一文中,介绍了在服务器中使用 Nginx 部署前后端项目的过程。然而,当 Web 应用流量增多时,需要考虑负载均衡、流量分发…

    数据库 2023年6月14日
    091
  • zabbix的基础使用

    zabbix的基础使用 创建zabbix监控服务 环境 IP 要安装的应用 服务器 192.168.111.135 lamp架构 zabbix server zabbix agen…

    数据库 2023年6月14日
    076
  • python中的cls和self区别

    self:Always use self for the first argument to instance methods self是作为类进行实例化传递的第一个参数,也就是我…

    数据库 2023年6月6日
    055
  • MySQL索引:B+树索引

    MySQL索引:B+树索引 B+树索引是传统意义上的索引,这是目前关系型数据库系统中查找最为常用和最为有效的索引。B+树索引的构造类似于二叉树,根据键值快速找到数据 B树 B+树是…

    数据库 2023年5月24日
    073
  • 心态崩了,我怎么知道实际生产环境的 B+ 树索引有多少层?

    Q:在实际生产环境中,InnoDB 中一棵 B+ 树索引一般有多少层?可以存放多少行数据? 关于这个问题最近好像在牛客上经常看到,感觉没啥意义,可能主要考察的是对 B+ 索引的理解…

    数据库 2023年6月6日
    085
  • springboot~用正则表达式提取bearer token

    前后一体的应用,是这样进行认证的 用户向服务端发送验证信息(用户名、密码); 服务端验证成功就向用户返回一个sessionid; 服务端保存了这个session_id对应的信息,并…

    数据库 2023年6月6日
    088
  • jmeter-跨线程组全局变量

    需求:两个线程组(A线程组与B线程组)👉A线程组的变量信息被B线程组引用。 操作: 1. A线程组使用登录接口获取token、通过Json提取器获取到登录token, 然后添加&#…

    数据库 2023年6月14日
    083
  • 一个诡异的MySQL查询超时问题,居然隐藏着存在了两年的BUG

    这一周线上碰到一个诡异的BUG。 线上有个定时任务,这个任务需要查询一个表几天范围内的一些数据做一些处理,每隔十分钟执行一次,直至成功。 通过日志发现,从凌晨5:26分开始到5:5…

    数据库 2023年6月16日
    099
  • mysql数据库创建数据库创建用户授权

    Liunx下登录数据库 mysql -u 用户名 -p 创建myblog用户,本地登录,口令是myblog create user ‘myblog’@&#8…

    数据库 2023年6月11日
    080
  • .NET nhibernate 添加新的表运行报is not mapped的问题

    最后在修改一个.NET nhibernate的项目,按照原来的表添加了一个实体和一个hbm.xml的配置文件,写好所有业务代码以后运行报以下错误 NoAuthorizationSi…

    数据库 2023年6月9日
    078
  • [springmvc]mvc的多种方式实现请求转发与重定向

    3.restful风格 RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。 RESTFUL适用于移动互联网厂商作为业务接…

    数据库 2023年6月16日
    072
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球