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)

大家都在看

  • 设计模式遵循的设计原则

    一、什么是设计原则? 答:如果说设计模式是编写代码的一种套路,那么设计原则就是用来约束我们使用这种套路应该要遵循的规则,只有遵循了这些规则的设计模式编写出来的应用程序才具有更好的扩…

    数据库 2023年6月14日
    084
  • Javascript基础

    作者导言: 引用偶像刘德华的一句话 “学到的就要教人,赚到的就要给人”! 以下是关联的web前端基础知识文章,通过这些文章,您既可以系统地学习和了解这些知识…

    数据库 2023年6月14日
    0107
  • 在浏览器中Django项目的静态文件打不开的一个原因

    2022-09-27 问题描述: 编写Django代码时,设置了一个”static”文件夹,在里面放置了一张图片。在”setting&#8221…

    数据库 2023年6月14日
    0102
  • leetcode 114. Flatten Binary Tree to Linked List 二叉树展开为链表(简单)

    一、题目大意 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始…

    数据库 2023年6月16日
    0104
  • Null和空值对于avg计算时产生的影响以及处理

    为什么要关注这一块呢:1.面试中可能会有涉及 2.工作中真的也可能会用,既然有可能我也用过,就拿出来跟大家分享一下,上一篇的博文,数据已准备好就不做数据准备的介绍了。 step1:…

    数据库 2023年6月6日
    0106
  • 数据库概述

    MySQL的启动、停止 启动: net start mysql80 停止: net stop mysql80 (PS:mysql80为Win注册到MySQL中的系统服务名称)* M…

    数据库 2023年5月24日
    076
  • JavaWeb 05_JDBC入门及连接MySQL

    一、概念 *概念: Java DataBase Connectivity Java数据库连接, Java语言操作数据库* JDBC本质:其实是官方(sun公司)定义的一套操作所有关…

    数据库 2023年5月24日
    0107
  • logrotate command in Linux

    背景 在生产过程中,由于磁盘空间、保留周期等因素,会对系统、应用等日志提出要求,要求系统日志定期进行轮转、压缩和删除,从而减少开销,而系统自带的 logrotate 则是一个简单又…

    数据库 2023年6月14日
    0171
  • MYSQL(基本篇)——一篇文章带你走进MYSQL的奇妙世界

    MYSQL算是我们程序员必不可少的一份求职工具了 无论在什么岗位,我们都可以看到应聘要求上所书写的”精通MYSQL等数据库及优化” 那么我们今天就先来了解一…

    数据库 2023年6月14日
    087
  • 第十三章 后置处理Bean

    BeanPostProcessor: 对Spring工厂所创建的对象,进行再加工 注意: BeanPostProcessor是一个接口 程序员实现BeanPostProcessor…

    数据库 2023年6月14日
    078
  • NO.5 MySQL-笔记

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月14日
    067
  • Git的使用

    1.前置篇 1.1 为什么要版本控制 1.2 什么是版本控制 1.3目前流行的版本控制软件有哪些 2.原理篇 2.1 GIT 概述 2.2 代码托管平台 2.3 GIT原理 3.安…

    数据库 2023年6月11日
    0105
  • Spring Boot 入门

    一、 Spring Boot 入门 1、Spring Boot 简介 简化Spring应用开发的一个框架;整个Spring技术栈的一个大整合;J2EE开发的一站式解决方案; 2、微…

    数据库 2023年6月6日
    0152
  • 面试必问之 CopyOnWriteArrayList,你了解多少?

    一、摘要 在介绍 CopyOnWriteArrayList 之前,我们一起先来看看如下方法执行结果,代码内容如下: public static void main(String[]…

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

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

    数据库 2023年6月14日
    0139
  • Host-Only模式下虚拟机无法联网问题

    环境: 镜像:Linux CentOS7——————————…

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