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)

大家都在看

  • Spring Boot + MyBatis 多模块项目搭建教程

    一、前言 1、开发工具及系统环境 * – IDE:IntelliJ IDEA 2020.2.2 – 系统环境:Windows 2、项目目录结构 * &#82…

    数据库 2023年6月6日
    0100
  • JavaWeb核心篇(1)——HTTP/Tomcat/Servlet

    JavaWeb核心篇(1)——HTTP/Tomcat/Servlet 在正式讲解JavaWeb前,我们先来了解一下JavaWeb: Web:全球广域网,也被称为万维网(www),能…

    数据库 2023年6月14日
    0110
  • CompletableFuture方法全解

    public class SpringbootWebApplicationTests { private final Logger logger = LoggerFactory.g…

    数据库 2023年6月6日
    085
  • Mysql自序整理集

    mysql事务是用于处理操作量大、复杂性高的数据 原子性:确保每个事务都有已完成或未完成的操作,不能卡在中间;如果事务在执行过程中出现错误,将回滚到事务开始之前的状态。 [En] …

    数据库 2023年5月24日
    094
  • 55 道MySQL基础题

    1.一张表,里面有 ID 自增主键,当 insert 了 17 条记录之后, 删除了第 15, 16, 17 条记录,再把 Mysql 重启,再 insert 一条记 录,这条记录…

    数据库 2023年5月24日
    0113
  • mysql数据库创建数据库创建用户授权

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

    数据库 2023年6月11日
    0101
  • Java架构师电商项目(220h):1-1 整体架构概述

    2022 Flag:学完这门 220h Java架构师电商项目视频课学习笔记将持续更新…… ; 大型网站特点 高并发 高可用 大数据 迭代周期短 用户量庞大…

    数据库 2023年6月6日
    093
  • Test post from Metablog Api

    This is the body of the post posted on2011-02-06 17:25 迷你软件 阅读(328 ) 评论() 编辑 本网站绝大部分资源来源于I…

    数据库 2023年6月11日
    092
  • myrocks复制中断问题排查

    mysql可以支持多种不同的存储引擎,innodb由于其高效的读写性能,并且支持事务特性,使得它成为mysql存储引擎的代名词,使用非常广泛。随着SSD逐渐普及,硬件存储成本越来越…

    数据库 2023年6月9日
    0107
  • super 和 this 的区别

    一、二者的区别 1.属性的区别:this访问本类中的属性,如果本类没有此属性则从父类中继续查找。super访问父类中的属性。2.方法的区别:this访问本类中的方法,如果本类没有此…

    数据库 2023年6月11日
    088
  • ArrayLIst在指定位置插入的内部实现

    今天看到一个问题:ArrayList的add方法有两种使用,那么add到指定位置内部是怎么实现的? 发现自己对这块地方不熟悉,所以立马去看了ArrayList下的源码 // 第一个…

    数据库 2023年6月9日
    089
  • MySQL锁:03.InnoDB行锁

    传送门:MySQL锁:01.总览传送门:MySQL锁:02.InnoDB锁传送门:MySQL锁:03.InnoDB行锁 InnoDB 行锁 锁排查可以用的视图和数据字典 InnoD…

    数据库 2023年6月16日
    0137
  • 【数据库】 — MySQL中查询当前时间间隔前1天的数据

    1.背景 在实际项目中,我们会遇到分布式定时任务执行的情况。有时在执行定时任务时,如果查询的数据量比较大,我们会选择执行前几天过滤的数据。 [En] In the actual p…

    数据库 2023年5月24日
    055
  • python-tkinter 自定义tkinter风格的提示框

    博客园的密码终于找回了 前言 偶尔使用python要绘制个简单输入提示框或者复选框窗体,使用tkinter的话绘制窗体也是很麻烦的,想着能不能把它自定义一个简单可复用的提示框。然后…

    数据库 2023年6月11日
    074
  • Mybatis-Plus初步上手!!

    1.简介 1.1、特性 2.快速开始 3.配置日志 4.CRUD拓展 4.1、插入 4.2、更新 4.3、查询 4.4、删除 5.性能分析插件 6.条件构造器Wrapper 7.代…

    数据库 2023年6月16日
    084
  • break&continue&return

    作用 1. 跳出整个循环体,进入循环下面的语句 2. 在多层嵌套循环中,break跳出内层循环 3. 可以使用带标签的break语句,跳出外层循环 编码 //break终止循环 p…

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