二叉树,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:什么是 树的带权路径长度? 创建一个.

风铃的博客 1795

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

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

kainever的专栏 3674

计算机视觉:暗通道去雾算法的原理及python实现

在绝大多数非天空的局部区域中,某些像素总会至少有一个颜色通道的值很低。对于一幅图像J(x),其暗通道的数学定义表示如下:其中,Ω(x)表示以x为中心的局部区域,上标c表示RGB三个通道。该公式的意义用代码表达也很简单,首先求出每个像素RGB分量中的最小值,存入一副和原始图像大小相同的灰度图中,然后再对这幅灰度图进行最小值滤波,滤波的半径由窗口大小决定。

weixin_51998427的博客 1万+

B树、B-树、B+树

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

个人技术博客 1075

python cartopy绘制扇形区域图/cartopy绘制北极部分区域

实际上,这个问题原因还是由于投影转换的问题,在set_extend时,绘制的上下边界仍然是方形、未被正确投影的边界,与我们的set_boundary存在冲突,最根本的原因还是在于cartopy对于投影计算的一些缺陷。另外我们需要指出的是:**该方法不适用于极地投影,即NorthPolarStereo,由于NorthPolarStereo本身投影特性只需一个参数,本身并不适合。我们绘制极地投影时,同样也是使用set_boundary绘制圆形边界,那么当我们想要绘制扇形时,可以通过。请根据喜好自行选择,

weixin_43750300的博客 3212

OAI数据集申请下载全攻略:从个人NDA账号注册到数据包下载的保姆级避坑指南

本文提供OAI数据集申请下载的完整指南,涵盖从个人NDA账号注册到数据包下载的全流程。重点解析login.gov验证陷阱、浏览器兼容性问题、NDA权限申请技巧及nda-tools高效使用方法,帮助医学影像研究者避开常见技术障碍,快速获取全球骨关节炎研究数据库OAI的宝贵数据资源。

weixin_28698059的博客 752

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

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

NT的博客 3347

【无人机设计与控制】基于PID控制的四旋翼无人机系统Matlab仿真

本文设计并仿真了基于PID控制的四旋翼无人机系统。首先,建立了四旋翼无人机的数学模型,涵盖了无人机的动力学和控制系统。通过PID控制器对四旋翼的姿态和位置进行控制,以实现其稳定飞行。使用MATLAB/Simulink对该系统进行仿真,验证了PID控制算法在四旋翼控制中的有效性。仿真结果表明,PID控制能够较好地调节四旋翼的飞行姿态,并有效抑制外部干扰,使得无人机能够保持平稳飞行。

2401_84610415的博客 1804

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万+

跨平台烧录实战:RKDevTool在Windows/Linux/MacOS下的统一与差异

本文详细解析了RKDevTool在Windows、Linux和macOS三大操作系统下的固件烧录实践,重点介绍了RK3576开发板的环境配置、工具链选择、烧录模式切换及常见问题解决方案,帮助开发者构建稳定可靠的跨平台烧录工作流。

cnn8visionary的博客 206

避开生产计划大坑:不懂MPS和MRP的区别,你的SAP PP模块白学了

本文深入解析SAP PP模块中MPS(主生产计划)与MRP(物料需求计划)的核心区别,揭示如何通过正确配置避免生产计划中的常见陷阱。文章详细探讨了MPS的三大缓冲特性和动态平衡算法,帮助企业提升生产计划稳定性,优化资源配置,避免生产线波动。

weixin_29268267的博客 401

B树简介

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

空杯心态_虚怀若谷 743

RV1126 ISP开发实战:从Tuner调试到IQ文件解析

本文详细介绍了RV1126 ISP开发的完整流程,从Tuner调试到IQ文件解析,涵盖了环境搭建、工具使用、参数配置及性能优化等关键环节。通过实战案例和避坑指南,帮助开发者快速掌握Rockchip芯片的ISP开发技巧,提升图像处理质量。

weixin_29195615的博客 571

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

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

wyqwilliam的博客 6万+

AI 代码生成工具的质量评估体系

基础需求层包括响应速度(Response Time)和界面友好性(UI Friendliness),期望需求层涵盖智能提示(Smart Suggestions)和个性化配置(Personalization),兴奋需求层则涉及多模态交互(Multimodal Interaction)和代码进化(Code Evolution)。在金融领域,代码审计合规性(Compliance Audit)权重应提升至40%,而在Web开发中,API兼容性(API Compatibility)的权重需达到35%。

2503_92418637的博客 3372

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

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

ai-exception的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

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

zzhongcy的专栏 4431

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

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

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

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

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

weixin_43240792的博客 2223

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

推荐数据结构在线学习连接:(可以动态演示数据结构存储情况) https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 二叉树、红黑树、B树、B+树也可以参考其他总结,如下: https://blog.youkuaiyun.com/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的博客 2969

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

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

2401_85467005的博客 928

二叉树、平衡二叉树、红黑树、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、付费专栏及课程。

余额充值