二叉树,B树,B+树

数据结构之树--二叉树/B树/B+树/红黑树及相关算法 树 定义:由一个根结点和m个非根结点组成(m >= 0),其中每个结点下连接n个子结点(n >= 0),非根结点且无子结点的称为叶子结点 树与图的区别在于树中没有一个闭环 二叉树 定义:即每个结点都最多只有两个子结点的树 完全二叉树:高度为k的二叉树,其1~h-1层为满结点,且其h层(叶子结点层)的节点从左至右依次排列(最多2^h-1个,最少0个) 满二叉树:除最后一层外... 阅读详情

先来看看二叉树
在这里插入图片描述
二叉树是大家熟知的一种树,用它来做索引行不行,可以是可以,但有几个问题:

 1.  如果索引数据很多,树的层次会很高(只有左右两个子节点),数据量大时查询还是会慢 
 2. 二叉树每个节点只存储一个记录,一次查询在树上找的时候花费磁盘IO次数较多

所以它并不适合直接拿来做索引存储,算法设计人员在二叉树的基础之上进行了变种,引入了B树的概念
在这里插入图片描述
如上图可知BTREE有以下特点:

1.不再是二叉搜索,而是N叉搜索,树的高度会降低,查询快
2.叶子节点,非叶子节点,都可以存储数据,且可以存储多个数据
3.通过中序遍历,可以访问树上所有节点

当我们利用索引查询的时候,不可能把整个索引全部加载到内存里,能做的只有逐一加载每一个磁盘页,这里的磁盘页对应着索引树的节点,也就是说索引树越低,我们的进行的磁盘IO数就越少,也就越能提高效率

B树被作为实现索引的数据结构被创造出来,是因为它能够完美的利用“局部性原理”,其设计逻辑是这样的

1.内存读写快,磁盘读写慢,而且慢很多
2.磁盘预读:磁盘读写并不是按需读取,而是按页预读,一次会读一页的数据,每次加载一些看起来是冗余的数据,如果未来要读取的数据就在这一页中,可以避免未来的磁盘读写,提高效率(通常,一页数据是4K)
3.局部性原理:软件设计要尽量遵循“数据读取集中”与“使用到一个数据,大概率会使用其附近的数据”,这样磁盘预读能充分提高磁盘IO效能

早先的MySQL就是使用的BTREE做为索引的数据结构,随着时间推移,B树发生了较多的变种,其中最常见的就是B+TREE变种,现在MySQL用的就是这种,示意如下:
在这里插入图片描述
B+TREE改进点及优势所在:

1. 仍然是N叉树,层级小,非叶子节点不再存储数据,数据只存储在同一层的叶子节点上,B+树从根到每一个节点的路径长度一样,而B树不是这样
2. 叶子之间,增加了链表(图中红色箭头指向),获取所有节点,不再需要中序遍历,使用链表的next节点就可以快速访问到
3. 范围查找方面,当定位min与max之后,中间叶子节点,就是结果集,不用中序回溯(范围查询在SQL中用得很多,这是B+树比B树最大的优势)
4. 叶子节点存储实际记录行,记录行相对比较紧密的存储,适合大数据量磁盘存储;非叶子节点存储记录的PK,用于查询加速,适合内存存储
5. 非叶子节点,不存储实际记录,而只存储记录的KEY的话,那么在相同内存的情况下,B+树能够存储更多索引,意味着B+树比B树更矮,磁盘IO次数越少

用通俗易懂的话,总结B+树的优势

B+树的优势:

1.单一节点存储更多的元素,使得查询的IO次数更少。

2.所有查询都要查找到叶子节点,查询性能稳定。

3.所有叶子节点形成有序链表,便于范围查询。

来自:小灰

数据结构之“树”——二叉树、红黑树、B树、B+树、B*树 这篇文章主要简单总结下二叉树、红黑树、B树、B+树、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:什么是 树的带权路径长度? 创建一个.

风铃的博客 1793

什么是B树(B-) , B+树

全文摘抄自 : 从B树、B+树、B*树谈到R 树B树(B- tree) B树不是二叉树,是多叉树 就像在上图中看到,一个节点如果有n个关键字,那么这个节点就会有n+1个子树 这点很好理解,就像节点key = 2 , 那么我们<2 , >2的两部分就构成了它的子树 特性 : 1. 关键字集合分布在整颗树中; 2. 任何一个关键字出现且只出现在一个结点中; 3. 搜索有可能在非叶子结点

kainever的专栏 3672

别再让COGI拖慢你的SAP接口!手把手教你配置BAPI_PRODORDCONF_CREATE_TT的同步货物移动

本文深入解析SAP生产订单报工接口中的COGI问题,通过BAPI_PRODORDCONF_CREATE_TT的同步配置实战,解决异步更新导致的性能瓶颈。文章详细介绍了增强点配置和性能验证,帮助用户彻底消除COGI堆积,提升接口效率。

weixin_29214691的博客 480

B树、B-树、B+树

一,B树(Binary Search Tree) B树即二叉搜索树,二叉排序树或者是空树,或者是满足如下性质的二叉树: 1,若它的左子树非空,则左子树上所有节点的关键字小于根节点的关键字。 2,若它的右子树非空,则右子树上所有节点的关键字大于根节点的关键字。 3,左、右子树本身又各是一颗二叉排序树。 二,B-树 a,B-树的定义 B-树称为多路平衡查找树,是一种组织和维护

个人技术博客 1072

2021秋招IC验证面经-ARM中国/中科芯/飞腾/地平线/中兴

中科芯 (央企福利待遇好,但是百分百不解决户口,适合当地人进去躺平。) 现场面试,三个面试官,时间大约40min 首先介绍一下自己,介绍一下项目。所做项目用到了FIFO吗,深度是多少,位宽是多少,仲裁算法是什么? 验证环境中的reference model是自己写的还是本身就有的,仲裁怎么在参考模型中实现,参考模型怎么获取寄存器的值? 怎么配置RTL寄存器,通过平台的寄存器模型进行寄存器配置,寄存器模型里边的方法,写一个寄存器或读一个寄存器怎么实现? 寄存器如何实现前门访问和后门访问,后门访问时

weixin_48014653的博客 6310

从Xilinx FPGA到MIPI DSI LCD屏:手撸代码的实战经验分享

本文分享了使用Xilinx FPGA驱动MIPI DSI LCD屏的实战经验。作者从依赖官方IP核失败,到与底层D-PHY IP缠斗,最终通过手撸代码,直接配置GTY收发器原语并实现完整的D-PHY与DSI协议栈,成功点亮屏幕。文章详细剖析了协议细节、Vivado工具链的调试技巧与避坑指南,为FPGA工程师提供了从理论到实践的宝贵参考。

weixin_29188997的博客 393

B树、B-树、B+树、B*树图文详解

B树 B树又叫做二叉搜索树,倒状的树形结构。如下图所示 特点: 所有的非子夜节点最多拥有两个子节点树(左子树和右子树)。 所有结点存储一个关键字。 节点的左右儿子,左边是比该节点小的,右边是比该节点大的。 缺点: 因为二叉搜索树不存在平衡算法,所以在某些特殊的情况下,二叉搜索树等同于线性,出现蹩脚的情况,设计者们发现降低树的高度自然就可以提高查找效率。那么如何解决降低树的高度的问题?在这种基础上设计者给二叉树加入了平衡算法,出现了平衡树。 二叉树搜索树的.

NT的博客 3344

MATLAB基础应用精讲-【数模应用】信用评分模型(附R语言和python代码实现)

信用评分模型是近年来兴起的一种为了保障银行和其他金融部门的金融安全而设立的一种关于人身金融权限的划定模型。该模型指根据客户的信用历史资料,利用一定的信用评分模型,得到不同等级的信用分数,根据客户的信用分数,来决定客户所可以持有的金额权限,从而保证还款等业务的安全性。而随着在现代社会和公司中,贷款,信用卡的作用日渐突出,信用评分模型的发展前景不可估量。信贷风险是指借款人因偿还贷款或履行合同承诺而破产而产生损失的可能性。传统上,它与贷款人无法偿还所欠利息和本金、影响现金流和增加装配成本所产生的风险有关。

qq_36130719的博客 360

B树、B-树、B+树、B*树介绍

B树、B-树、B+树、B*树之间的关系B树B+树B*树 B树 B-树就是B树(可能有部分人会习惯上把B-树读为B减树,其实并不存在B减树,只是读法上的不同而已),B就是balanced,平衡的意思。B-树就是指的B树,特此说明一下。 先介绍一下二叉搜索树。 顾名思义,二叉搜索树,即指最多拥有两个叉,这里的叉即为所有非叶子结点的儿子(Lift和Right); 所有的结点存储一个关键字; 非叶子结点...

A_zhangq的博客 2万+

第 5 篇:责任链模式 (Chain of Responsibility) —— 协议栈的流水线

本文介绍了责任链模式在嵌入式通信协议解析中的应用。针对传统"面条式"代码维护困难的问题,提出将各协议解析器解耦为独立处理单元,通过链表形式串联。文章详细展示了模式实现:定义抽象处理者接口、实现具体协议处理器、构建链表管理器。该方案具有内存占用低(O(1)栈空间)、可动态扩展、支持优先级调整等优势,并探讨了性能优化策略及动态插件系统等扩展应用,为嵌入式通信协议处理提供了清晰的架构方案。

一路往蓝-Anbo 的博客 171

【人工智能】 WebDev Arena:实时AI Web开发竞赛的技术探索与价值

《AI编程竞赛推动Web开发技术创新》摘要:WebDev Arena作为聚焦Web开发领域的实时AI编程竞赛,通过标准化竞技环境检验AI模型在代码生成、问题解决等方面的能力。竞赛覆盖前端、后端等全流程开发环节,采用实时评分机制,推动AI对复杂Web需求的理解和多元技术栈适配。该赛事不仅促进AI编程技术创新,更为Web开发行业与AI技术融合搭建桥梁,有望提升开发效率、降低技术门槛。未来将拓展Web3.0等前沿技术主题,持续推动行业智能化发展。(150字)

奶爸的编程之路,也就一周冷个三天 236

B树简介

b树又称二叉搜索树,英文全称binary search tree ,其定义如下: 1、每个节点最多能拥有2个子节点(即每个非叶子节点最多拥有2个指针指向左右节点); 2、非叶子节点的左指针指向小于其关键字的左子树,右指针指向大于其关键字的又子树; 3、每个节点节点存储一个关键字; 查找过程: b树的搜索从根节点开始: 如果查找的关键字和节点的关键字相等则命中,查找成功; 如果

空杯心态_虚怀若谷 743

YOLOv8独家原创改进:原创自研 | 自研独家创新DSAM注意力 ,基于BiLevelRoutingAttention注意力升级

提出新颖的注意力DSAM(Deformable Bi-level SpatialAttention Module),创新度极佳,适合科研创新,效果秒杀CBAM,Channel Attention+Spartial Attention升级为新颖的Deformable Bi-level Attention+Spartial Attention

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1499

二叉树,平衡二叉树,红黑树,B-树、B+树、B*树的区别

二叉查找/搜索/排序树  BST  (binary search/sort tree) 或者是一棵空树; 或者是具有下列性质的二叉树: (1)若它的左子树不空,则左子树上所有结点的值均小于它的根节点的值; (2)若它的右子树上所有结点的值均大于它的根节点的值; (3)它的左、右子树也分别为二叉排序树。 注意:对二叉查找树进行中序遍历,得到有序集合。 平衡二叉树(Self-balancing b...

wyqwilliam的博客 6万+

【Arduino 动手做】构建一个迷你 Las Vegas RGB LED 球体

《Arduino迷你拉斯维加斯球体项目:15岁少年的创意挑战》 15岁的Ben通过本项目展示了如何利用Arduino平台制作一个经济实惠的迷你拉斯维加斯球体夜灯。该项目涉及LED选择(采用WS2812B可编程灯带)、电子元件配置(含Arduino Nano微控制器和红外遥控)以及3D建模设计(100毫米直径球体)。项目难点包括LED布局优化、供电方案设计和3D打印外壳制作。Ben详细记录了从背景研究、电路设计到最终实现的完整过程,特别强调了分辨率与成本的平衡,以及如何通过白色扩散器改善视觉效果。这个项目不仅

雕爷学编程 1016

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

平衡二叉树、B树、B+树,B*树的区别与联系

平衡二叉树 定义:基于二分法的策略提高数据的查找速度的一种二叉树数据结构; 特点:平衡二叉树是采用二分法思想把数据按规则组装成一个树形结构的数据,用这个树形结构的数据减少无关数据的检索,大大的提升了数据检索的速度;平衡二叉树的数据结构组装过程遵循以下规则: (1)非叶子节点只能允许最多两个子节点存在。 (2)每一个非叶子节点数据分布规则为左边的子节点小当前节点的值,右边的子节点大于当前节点的值(这...

ai-exception的博客 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

二叉树、B树(B-树)、B+树、B*树详解,以及为什么MySQL选择B+树做索引

温故而知新,可以为师矣。看到一篇介绍B数和B减树的文章,这里记录一下。 1. 简要 众所周知,MySQL的索引使用了B+树的数据结构。那么为什么不用B树呢? 先看一下B树和B+树的区别。 2. 二叉树 先介绍一下二叉搜索树。 顾名思义,二叉搜索树,即指最多拥有两个叉,这里的叉即为所有非叶子结点的儿子(Lift和Right); 所有的结点存储一个关键字; 非叶子结点的左指针指向小于其关键字的结点,右指针指向对于其关键字的结点,结构如下图: 二叉搜索树的搜索,从根结点开始,如果查询的关...

zzhongcy的专栏 4424

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

二叉排序树、平衡二叉树、红黑树、B树、B+树

全民制作人们,大家好。我是练习时长两天半的个人练习册,喜欢B树,B+树,BST树, AVL树,来redblack~

24考研人晴落的博客 1万+

二叉树、B树、B+树、红黑树

一、二叉树 定义:即每个结点都最多只有两个子结点的树 完全二叉树:高度为k的二叉树,其1~h-1层为满结点,且其h层(叶子结点层)的节点从左至右依次排列(最多2^h-1个,最少0个) 满二叉树:除最后一层外,每个结点都有左右子结点的二叉树 平衡二叉树:任一结点的左右子树的高度差绝对值不超过1,且左右子树均为平衡二叉树(防止树退化成链表) 二、红黑树 本质:自平衡...

weixin_43240792的博客 2220

二叉树、B树、B+树总结

推荐数据结构在线学习连接:(可以动态演示数据结构存储情况) https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 二叉树、红黑树、B树、B+树也可以参考其他总结,如下: https://blog.csdn.net/ff_simon/article/details/101055134 一、二叉树 定义:树中的每个节点最...

在不断的学习和实践中提升自己...... 1006

二叉树,红黑树,23树,B树,B+树

文章目录二叉树树的相关术语删除元素二叉树的基础遍历前序遍历中序遍历后序遍历二叉树的层序遍历二叉树的最大深度问题二叉树代码设计平衡树2-3查找树查找插入向2-结点中插入新键向一棵只含有一个3-结点的树中插入新键向一个父结点为2-结点的3-结点中插入新键向一个父结点为3-结点的3-结点中插入新键分解根结点2-3树的性质红黑树红黑树的定义平衡化左旋右旋向单个2-结点中插入新键向底部的2-结点插入新键颜色反转向一棵双键树(即一个3-结点)中插入新键根结点的颜色总是黑色向树底部的3-结点插入新键红黑树的实现B-树B树

weixin_53184069的博客 2968

二叉树、B树以及B+树(概念厘清)

简单总结一下,B+树与B树的最大的区别在于B+树中每个结点的关键字的个数与其所有的子树个数是相对等的,而B树中的每个结点的关键字的个数一般会较其所有的子树个数少一个。路径上最接近结点K的的结点E称为K的双亲,K是结点E的孩子。,并且不带信息(可以视为外部结点或类似于折半查找判定树的查找失败结点,实际上这些结点不存在,指向这些结点的指针为空。左子树上所有结点的值都小于根结点的值,且右子树上所有结点的值都大于根结点的值;树中的某个结点(除根结点外)最多只和上一层的一个结点有直接的关系。

2401_85467005的博客 925

二叉树、平衡二叉树、红黑树、B树、B+树与B*树

一、二叉树 1️⃣二叉查找树的特点就是左子树的节点值比父亲节点小,而右子树的节点值比父亲节点大,如图: 基于二叉查找树的这种特点,在查找某个节点的时候,可以采取类似于二分查找的思想,快速找到某个节点。n 个节点的二叉树,正常情况下,查找的时间复杂度为 O(logN)。之所以说是正常情况下,是因为二叉查找树有可能出现一种极端的情况,例如: 这种情况虽也满足二叉树的条件,但已经近似退化为一条链表,这样的二叉树的查找时间复杂度顿时变成了 O(n)。所以必须防止这种情况发生,于是引申出了平衡二叉树。 二、平衡二叉树

ChineseSoftware的博客 1503

二叉树、满二叉树、完全二叉树、平衡二叉树、B树、B+树怎么辨别大家都清楚了吗

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、二叉树二、满二叉树三、完全二叉树四、平衡二叉树五、B树六、B+树 前言 最近在些数据库原理性的东西,经常会看到各种树结构,各种树的名称早已混淆,一直想梳理下这块的知识,方便理解存储、查找算法方面的知识。 提示:以下是本篇文章正文内容 一、二叉树 二叉树的特点: 1)每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点。 2)左子树和右子树是有顺序的,次序不能任意颠倒 3)即使树中某结点只有一棵子树,也要区分它是左子树

zhongweill622的博客 3934

探索树结构及其应用:从二叉树到B树、B+树和B*树

树是一种非线性的数据结构,由节点和边组成。树中的每个节点可以有零个或多个子节点,而节点之间通过边连接,形成层次结构。二叉树是一种特殊的树结构,每个节点最多有两个子节点:左子节点和右子节点。二叉树的特点包括有序性和递归性。B*树是Oracle数据库中使用的一种索引结构,用于优化大型数据库的查询性能。B*树是一种多维的、自适应的树结构,能够高效地处理多个查询条件。二叉树适用于表示层级关系,B树适用于有序数据的存储和检索,B+树适用于范围查询和排序操作,B*树通过优化内部节点的填充度进一步提高了查询性能。

创意程序员的博客 1097

二叉树,平衡二叉树,红黑树,b树,b+树,b*树的缺点与优点以及使用场景

1、二叉查找树的缺点 二叉查找树,相信大家都接触过,二叉查找树的特点就是左子树的节点值比父亲节点小,而右子树的节点值比父亲节点大,如图 基于二叉查找树的这种特点,我们在查找某个节点的时候,可以采取类似于二分查找的思想,快速找到某个节点。n 个节点的二叉查找树,正常的情况下,查找的时间复杂度为 O(logn)。 之所以说是正常情况下,是因为二叉查找树有可能出现一种极端的情况,例如 这种情况也是满...

ff_simon的博客 1万+
上一篇: Laravel6验证器验证多个字段的唯一索引
下一篇: Nginx配置文件详解和优化
苦艾酒丶
博客等级 码龄9年 41粉丝 99原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值