2-3查找树的插入与删除

查找树(BST到2-3树再到红黑树) 简单记录二叉查找树、和红黑树的思路和代码,以及从BST到红黑树过渡的2-3树。 阅读详情

本片博客前面部分截取自算法(第4版)

定义:

 


查找:

要判断一个键是否存在树中,先将它和根节点中的键比较,如果它和其中任意一个相等,查找命中;否则就根据比较的结果找到指向相应区间的连接,并在其指向的子树中递归地继续查找,如果找到了空连接上,查找未命中。

插入:

插入之前,先要对2-3树进行一次未命中的查找:

1、  向2-节点中插入新键

如果未命中查找结束于一个2-节点,直接将2-节点替换为一个3-节点,并将要插入的键保存在其中

2、  向一颗只含3-节点的树中插入新键

先临时将新键存入唯一的3-节点中,使其成为一个4-节点,再将它转化为一颗由3个2-节点组成的2-3树,分解后树高会增加1

3、  向一个双亲节点为2-节点的3-节点中插入新键

先构造一个临时的4-节点并将其分解,分解时将中键移动到双亲节点中(中键移动后,其双亲节点中的位置由键的大小确定)

4、  向一个双亲节点为3-节点的3-节点中插入新键

一直向上分解构造的临时4-节点并将中键移动到更高层双亲节点,直到遇到一个-2节点并将其替换为一个不需要继续分解的3-节点,或是到达树根(3-节点)。

5、  分解根节点

如果从插入节点到根节点的路径上全是3-节点,根将最终被替换为一个临时的4-节点,将临时的4-节点分解为3个2-节点,分解后树高会增加1

变换:

1、局部变换

将对一个4-节点的分解叫做变换,对一个4-节点的变换方式可能有6种:


这些变换都是局部的,除了相关的节点和链接之外不必修改或检查树的其他部分

2、全局性质:

变换不会影响树的全局有序性和平衡性,任意空链接到根节点的路径长度依旧是相等的

生长:

 

后面部分参考自大话数据结构

删除:

插入之前,先要对2-3树进行一次命中的查找:

1、删除非叶子节点key:

         使用中序遍历下的直接后继节点key来覆盖当前节点key,再删除用来覆盖的后继节点key

2、删除叶子节点key:

a)        当前节点不是2-节点,直接删除key

b)        当前节点是2-节点,删除节点,并作一些判断:

a)        当前节点的双亲节点是2-节点、兄弟节点是3-节点,将双亲节点移动到当前位置,再将兄弟节点中最接近当前位置的key移动到双亲节点中

b)        当前节点的双亲节点是2-节点、兄弟节点也是2-节点,先通过移动兄弟节点的中序遍历直接后驱到兄弟节点,以使兄弟节点变为3-节点;再进行a)的操作

c)        当前节点的双亲节点是3-节点,拆分双亲节点使其成为2-节点,再将再将双亲节点中最接近的一个拆分key与中孩子合并,将合并后的节点作为当前节点

d)        2-3树是一颗满二叉树,将2-3树层树减少,并将兄弟节点合并到双亲节点中,同时将双亲节点的所有兄弟节点合并到双亲节点的双亲节点中,如果生成了-4节点,再分解4-节点即可

 

【大话数据结构C语言】58 多路查找树(B树)之2-3树 欢迎关注我的公众号是【CodeAllen】,关注回复【1024】获取精品学习资源 程序员技术交流①群:736386324 程序员技术交流②群:371394777 多路查找树 由于涉及到去内存读取数据的问题,此时内存存取外村次数成为实现效率上的瓶颈,这就迫使要打破每一个结点只存储一个元素的限制,为此引入了多路查找树的概念 多路查找树,其每一个结点的孩子树可以多于两个,且每一个结点处可以存储多个元素 2-3树 2-3树其中每一个结点都具有两个孩子(2结点),或者三个孩子... 阅读详情

相关推荐

2-3树的实现

陈建二老师总结的2-3树讲课资料,主要适用于中南大学计算机系研究生的高级算法课程

2-3树的删除

2-3树所有叶子都在同一个层次,也就是说每一层的叶子数目都是相等的,如图1: 1.删除的元素是叶子节点并且含有两个元素,比如删除6,直接删除即可,如图2: 2.删除的元素是叶子节点并且只有1个元素的话,但是父节点的右节点函数含有两个元素,可以进行左旋转,为什么要左旋转呢,因为左边失去了平衡了,举例:删除图1的元素1的话,(6,7)进行左旋转,6的右节点保持,6的左节点等于4,如

是我 6056

2-3树的插于及删除操作源代码

NULL 博文链接:https://shinepw.iteye.com/blog/1271090

2-3树的插入和删除操作

2-3树之查找、插入和删除操作

m0_60435649的博客 2549

ComfyUI安装包运行前准备:增加虚拟内存

在Windows系统中,虚拟内存是一种重要的系统资源管理机制,它主要通过将硬盘空间用作内存来扩展系统的可用内存容量。以下是虚拟内存的主要作用: 1. 扩展物理内存容量 当物理内存(RAM)不足时,系统会将一部分数据从内存转移到硬盘上的虚拟内存区域(也称为“分页文件”或“交换文件”)。这样可以为正在运行的程序提供额外的“内存空间”,确保系统能够继续运行,而不会因为内存不足而崩溃。 2. 提高系统稳定性 虚拟内存为系统提供了一个缓冲区。如果没有虚拟内存...

聚梦小课堂 1万+

从UE4到Unity:双叶高光技术在角色皮肤渲染中的移植全流程

本文详细解析了将UE4中的双叶高光技术移植到Unity引擎的全流程。该技术通过模拟皮肤油脂层和真皮层的不同反射特性,能显著提升角色皮肤渲染的真实感。文章从核心原理、贴图资产处理、Shader代码重构到参数调校,提供了完整的跨引擎移植实战指南,帮助开发者实现高质量的皮肤质感还原。

alice7model的博客 478

认真学习数据结构之2-3树

在插入和删除结点时,要保证插入结点后不能使叶子结点之间的深度之差大于1,这样就能保证整棵树的深度最小,这就是AVL树解决BST搜索性能降低的策略。 但由于每次插入或删除结点后,都可能会破坏AVL的平衡,而要动态保证AVL的平衡需要很多螺旋操作,这些操作会影响整个数据结构的性能,除非是在树的结构变化特别少的情形下,否则AVL树平衡带来的搜索性能提升有可能还不足为了平衡树所带来的性能损耗。 那有没有绝对平衡的一种树呢?没有高度差也不会有平衡因子,没有平衡因子就不会调整旋转操作。2-3树正是一种绝对平衡的树,

小小默:进无止境 2293

从零到一:RK3588嵌入式开发中的SDK与MPP集成实战解析

本文详细解析了RK3588嵌入式开发中SDK与MPP(Media Process Platform)的集成实战,涵盖开发环境构建、SDK架构解析、MPP集成关键技术点及常见问题诊断。通过Qt5.12.10交叉编译环境配置和硬件加速优化,帮助开发者高效完成嵌入式视觉项目开发,特别适合边缘计算应用场景。

weixin_29189381的博客 511

全网最详细的2-3树图解

2-3树 定义: 2-3树是最简单的B-树(或-树)结构,其每个非叶节点都有两个或三个子女,而且所有叶都在统一层上。2-3树不是二叉树,其节点可拥有3个孩子。不过,2-3树与满二叉树相似。若某棵2-3树不包含3-节点,则看上去像满二叉树,其所有内部节点都可有两个孩子,所有的叶子都在同一级别。另一方面,2-3树的一个内部节点确实有3个孩子,故比相同高度的满二叉树的节点更多。高为h的2-3树包含的节点数大于等于高度为h的满二叉树的节点数,即至少有2^h-1个节点。换一个角度分析,包含n的节点的2-3树的高度不大

qq_41346335的博客 1万+

APM无人船测绘实战:从RTK、测深仪到图传的完整系统集成指南

本文提供了一套完整的APM无人船测绘系统集成实战指南。从RTK模块配置、测深仪数据同步到图传系统接入,详细解析了硬件选型、接线、软件参数调试及QGC地面站任务规划的全流程,旨在帮助用户将分散的部件整合为可自主执行水下地形测绘的可靠工具。

rr23456的博客 520

避坑指南:RK3588上编译EtherCAT 1.6时遇到的权限问题和模块安装错误

本文详细解析了在RK3588平台上编译EtherCAT 1.6时常见的权限问题和模块安装错误,提供了两种实战解决方案和嵌入式开发的通用权限管理策略。通过优化内核配置和编译参数,显著提升实时性能,帮助开发者高效完成EtherCAT主站部署。

weixin_33724046的博客 453

2-3树插入、删除操作

一、定义2-3查找树的定义如下: 要么为空,要么: 对于2节点,该节点保存一个key及对应value,以及两个指向左右节点的节点,左节点也是一个2-3节点,所有的值都比key要小,右节点也是一个2-3节点,所有的值比key要大 对于3节点,该节点保存两个key及对应value,以及三个指向左中右的节点。左节点也是一个2-3节点,所有的值均比两个key中的最小的key还要小;中间节点也是一个2-3节点

Programming is an art form. 4838

[关系图谱] 二.Gephi导入共线矩阵构建作者关系图谱

本文主要讲解Gephi绘制作者间的关系图谱,该软件可以广泛应用于社交网络、知识图谱分析,推荐读者使用。这是非常基础的一篇文章,重点讲解Gephi使用方法,希望对大家有所帮助。

杨秀璋的专栏 1万+

图解红黑树之2-3查找树

树结构树结构有下面的几个缺点 空间:占空间较多相对于线性结构 创建:构造起来比较麻烦 维护:对于平衡树,结构修改(增、删)后又需要平衡 那么,既然这样为什么还要用树结构呢。原因很简单,它的插入和删除操作所使用的时间非常短。红黑树可以在O(log n)的时间内做查找、插入和删除操作。2-3查找树直接接受“红黑树”还是有些难以下咽的,红黑树跟2-3查找树有着千丝万缕的联系,因此这里从简单轻松的2-3查找

TonyaBaSy 2700

【06】C#入门到精通——C# 多个 .cs文件项目 同一项目下添加多个 .cs文件

本文介绍了如何将C#游戏开发中的代码从单个.cs文件拆分到多个.cs文件中,以提升代码的可维护性和可读性。文章演示了在Visual Studio中创建Hero类和ShowInfo类的具体步骤:通过右键项目名添加新建类,将原有代码分别剪切到对应的类文件中,并自动生成命名空间。拆分后需要在Program.cs中通过"using"指令引用这些类,最后通过运行测试验证功能正常。这种模块化代码组织方式能有效解决单一文件代码过长、结构混乱的问题。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1137

【制作100个unity实战之2】实现一款简单的FPS游戏

你将学到: fps武器脚本 基础瞄准功能 僵尸敌人AI 巡逻范围 攻击间 搜寻半径 追击 枪声吸引周围的僵尸 击中僵直效果

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 3552

【数据结构】图文详解红黑树(从2-3查找树引入&&附C++代码)

一篇超长的关于红黑树的文章,从2-3查找树入手引入红黑树概念,进而利用图文分析了红黑树的旋转操作、平衡操作、添加操作和删除操作,并附有C++实现代码。

weixin_50941083的博客 606

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

2-3查找树

红黑二叉查找树(原理、实现) 1. 什么是2-3查找树 对于普通的二分查找树,我们希望树的高度永远都是lgN,这样所有的查找操作都能在lgN次比较内结束,但是在动态插入中要保证树的完美平衡的代价太高了; 为了保证查找树的平衡性,我们需要一些灵活性,稍微放松点完美平衡的要求,允许树种的一个结点保存多个键,也就是2-3查找树(B-树) 一个2-3查找树或是一个空树,或是由下列结点组成: 2-结点:...

Javaer`s blog 1126

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

数据结构与算法回顾-4:平衡查找树

二叉树虽然能解决查找的问题,但是在某些情况下,比如当任意相邻的两个元素之间是按照升序或者降序插入的话,那么得到的树将是一个链表的形状。当然这只是一种极端的情况,只是用来说明,树的形状对二叉查找的效率有很大的影响。 这里的平衡二叉树能够让树保持完美的平衡,不会出现极端的成为链表等,而且我们也会试图去保持树的完美平衡。 它实现这个平衡目的的方式是:对于 3-结点,如果再向其插入数据,就会使其变成 4-...

你好,开发者 405

2-3树与2-3-4树

2-3树   2-3树是一棵自平衡的多路查找树,它并不是一棵二叉树,具有如下性质: (1)每个节点有1个或2个key,对应的子节点为2个子节点或3个子节点; (2)所有叶子节点到根节点的长度一致; (3)每个节点的key从左到右保持了从小到大的顺序,两个key之间的子树中所有的key一定大于它的父节点的左key,小于父节点的右key。   如下图所示,   为什么会有2-3树这种数...

金发只是水一下的博客 8505

五、高级数据结构和算法:2-3查找树、红黑树

2-3树的原理和红黑树插入、删除等功能的实现

小脑斧的博客 442

二叉查找树和红黑树

文章目录1 二叉查找树1.1 原理1.2 二叉查找树插入1.3 二叉查找树删除1.2 缺陷2 红黑树2.1 平衡树2.1.1 简介2.1.2 平衡性的维护2.1.2.1 LL(右单旋转)2.1.2.2 RR(左单旋转)2.1.2.3 LR平衡旋转(先左后右旋转)2.1.2.4 RL RL平衡旋转(先右后左旋转)2.2 2-3 查找平衡树2.2.1 简介2.2.2 2-3平衡树的插入2.2.2.1 ...

梦的灰色边沿... 655

平衡查找树(2-3-4 树)

二叉查找树(Binary Search Tree)在很多情况下可以良好的工作,但它的限制是最坏情况下的渐进运行时间为 O(n)。 平衡查找树(Balanced Search Tree)的设计则是保证其高度在最坏的情况下为O(log n),其插入、删除和查找可以实现渐进运行时间O(log n)。 现在其实存在很多种类的平衡查找树,常见的有 AVL树、红黑树、B 树等。 不同的平衡...

aijianxie8808的博客 226

数据结构之树——二叉查找树、2-3树、2-3-4树、红黑树、B树、B+树及其关系

前言 对于大量的输入数据,链表的线性访问时间太慢,不宜使用。由此,其他的更高效的数据结构被提出,二叉查找树是其中重要的一个。二叉查找树是两种库集合类TreeSet和TreeMap实现的基础,应用很广泛。在计算机科学中树(tree)是非常有用的抽象概念。 树的定义 定义树的一种自然的方式是递归的方式。一棵树是一些节点的集合,这个集合可以是空集;若不是空集,则树由称作根(root)的节点r与...

MustangJy的博客 936

2-3树的插入和删除

2-3树是多路查找树中的一种,出现多路查找树,主要是跟内存与磁盘交互有关。内存IO的速度比磁盘IO要快的多的多,但是同样空间大小的内存比硬盘要贵的多的多,像TB级别的数据库不可能全部读出来放到内存中去,太过昂贵,而且也没必要,大部分数据是不经常用的,所以就需要内存与外存互相结合,而如果用平衡二叉树这种数据结构,在大数据量的情况下,树肯定会很高,树高直接决定了查找效率,而同等高的平衡二叉树中存储的信...

严霜九月 1557

多路查找树(2-3树、2-3-4树、B树)

多路查找树 其每一个结点的孩子数可以多于两个,且每一个结点处可以存储多个元素。由于它是查找树,所有元素之间存在某种特定的排序关系。在这里,每一个结点可以存储多少个元素,以及它的孩子数的多少是非常关键的。为此我们讲解它4种特殊形式:2-3树、2-3-4树、B树和B+树。 2-3 树 (1)2-3 树是这样的一颗多路查找树:其中的每一个结点都具有两个孩子(我们称它为2结点)或三 ...

qq_43059674的博客 671
上一篇: 2-3查找树
下一篇: 红黑二叉查找树
早起的虫儿灬
博客等级 码龄10年 54粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值