经典数据结构之2-3树

news2024/11/17 4:43:15

2-3树定义

2-3树,是最简单的B-树,其中2、3主要体现在每个非叶子节点都有2个或3个子节点,B-树即是平衡树,平衡树是为了解决不平衡树查询效率问题,常见的二叉平衡书有AVL树,它虽然提高了查询效率,但是插入操作效率不高,因为它需要再每次插入节点后维护树的平衡,而为了解决查询效率同时有兼顾插入效率,于是提出了2-3树。

 

2-3树特点

  • 2-3树是一棵平衡树,但不是二叉平衡树。
  • 对于高度相同的2-3树和二叉树,2-3树的节点数要大于满二叉树,因为有些节点可能有三个子节点。
  • 2-3树可以是一棵空树。
  • 对于2节点来说,该节点保存了一个key及对应的value,除此之外还保存了指向左右两边的子节点,子节点也是一个2-3节点,左子节点所有值小于key,右子节点所有值大于key。
  • 对于3节点来说,该节点保存了两个key及对应的value,除此之外还保存了指向左中右三个方向的子节点,子节点也是一个2-3节点,左子节点的所有值小于两个key中较小的那个,中节点的所有值在两个key值之间,右子节点大于两个key中较大的那个。
  • 对2-3树进行中序遍历能得到一个排好序的序列。

 

2-3树查找

2-3 树的查找类似二叉搜索树的查找过程,根据键值的比较来决定查找的方向。

例如在图 2.1 所示的 2-3 树中查找键为H的节点:

例如在图 2.1 所示的 2-3 树中查找键为 B 的节点:

2-3树插入

插入

在树的插入之前需要对带插入的节点进行一次查找操作,若树中已经有此节点则不予插入,若没有查找到此节点则记录未命中查找结束时访问的最后一个节点。
空树的插入最简单,创建一个节点即可,这里不予赘述。
对于非空树插入主要分为 4 种情况:
(1)向 2- 节点中插入新节点
(2)向一棵只含 3- 节点的树中插入新节点
(3)向一个父节点为 2- 节点的 3- 节点中插入新节点
(4)向一个父节点为 3- 节点的 3- 节点中插入新节点

向2-节点中插入新节点

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

图解:

向一棵只含 3- 节点的树中插入新节点

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

图解:

向一个父节点为 2- 节点的 3- 节点中插入新节点

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

图解:

向一个父节点为3-节点的3-节点中插入新节点

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

图解:

 

总结

2-3 树作为一种平衡查找树,查询效率比普通的二叉排序树要稳定许多。但是2-3树需要维护两种不同类型的结点,查找和插入操作的实现需要大量的代码,而且它们所产生的额外开销可能会使算法比标准的二叉查找树更慢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/455797.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mac AndroidStudio开发环境搭建

Mac AndroidStudio开发环境搭建 1.在Mac上配置环境变量 执行 open ~/.bash_profile (该文件是配置环境变量) 如果提示没有 执行 touch ~/.bash_profile 进行创建 打开文件之后 新增jdk和android sdk 参考蓝色部分需要替换对应内容 #jdk export JAVA_HOME/Library/J…

【100个 Unity实用技能】 | InputField输入框组件实现输入限制,只能输入中文或特殊字符等

🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏制作专栏推荐:游戏制作 &…

tar: invalid option -- ‘z‘

在嵌入式开发过程中,出现tar命令无法识别到z选项,说明我们系统的tar命令版本太旧了,需要进行版本更新 下载地址 ftp://alpha.gnu.org/gnu/tar/ 这里选择下载 tar-1.27.1.tar.gz 我发现这个网址有时候会缺少一些版本,其他版本…

NeRFStudio系列 Part 1:PipeLines概述

前言:Why NeRFStudio? NeRF社区是近两年来计算机领域最活跃的学术社区之一,各种具有milestone意义的算法层出不穷,各位作者的开源工作也做得非常扎实,非常多的工作都自带了code、data、project page。 但是后继者想要在这些伟大的…

gpt3.5和gpt4区别-gpt3.5和gpt4

gpt系列 GPT系列是OpenAI公司开发的一组基于人工智能深度学习技术的自然语言处理模型。GPT代表Generative Pre-trained Transformer,即预训练生成模型。目前,GPT模型已经推出了三代(GPT-1,GPT-2,GPT-3)&am…

【Linux】虚拟机VMware中Centos7系统设置静态ip的详细步骤详解,看这一篇就够啦!

此篇主要讲解一下在VMware中创建centos7之后如何设置静态IP,有时候外部的连接工具要连接过来,需要稳定的一个ip地址,不然老是换ip,我们平时测试练习学习一些东西都会造成阻碍。接下来我使用设置if-ens33文件和nmtui命令的两种方式…

企业绩效管理怎么做?

阅读本文您将了解:1.企业绩效管理是什么;2.企业绩效管理怎么做;3.绩效管理系统的优势所在。 一、绩效管理是什么 绩效考核和绩效管理是企业管理中必须了解和掌握的概念。绩效考核是企业对主要经济和技术指标完成情况按照既定方案进行的考核…

密码安全性和数据合规性

企业有责任妥善存储和共享信息。过去的可怕事件,如雅虎的大规模数据泄露导致数百万用户的敏感信息被泄露,突显了为什么企业主如此担心其组织中的数据安全。 数据泄露不仅会使用户的隐私受到威胁,而且还会对公司的财务和声誉产生不可逆转的影…

​Laravel 使用 MinIO 作为文件存储​

起因 我们的图片资源和其他静态资源都采用 S3 来进行存储,于是我们为了降低代码复杂度,我们在开发和测试阶段用的存储页时线上 S3 环境,一直以来一切都正常运行着。但是突然有一天,在国内的测试服上传文件到 S3 出现了超时的问题…

Vue核心 模板语法 数据绑定

1.3.模板语法 Vue模板语法包括两大类 1.插值语法 功能:用于解析标签体内容 写法:{{xxx}},xxx 是 js 表达式,可以直接读取到 data 中的所有区域 2.指令语法 功能:用于解析标签(包括:标签属性…

Vue3+Typescript+Vitest单元测试+组件Props篇

上一节我们学习了如何测试组件内部的emit事件组件事件测试篇,这一节我们来测试一下组件的props 新增一个组件ZmTag 非常简单,就是可以接受三个参数,然后我们分别来测试三个参数传入的效果 import { defineComponent } from "vue"…

Python GUI设计——Python语言介绍

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 写在前面 本Python专栏主要讲解 PythonGUI设计 tkinter从入门到实践 系列,本…

PHP实现使用函数实现对数组进行排序

目录 前言 一、使用函数实现对数组进行排序 1.1运行流程(思想) 1.2代码段 1.3运行截图 前言 1.若有选择,可实现在目录里进行快速查找; 2.本弹窗界面可以根据简单的要求实现一使用功能。同时可以实现自定义的设置&#xff1…

最受信任的低代码平台排行榜

近年来,随着数字化转型的兴起,低代码平台获得了大量关注。它允许用户在几乎没有编码知识的情况下创建应用程序,从而使企业能够简化其流程并提高效率。随着低代码平台的日益流行,要确定哪些平台最可靠、最值得信赖并非易事。在本文…

三步配置轻量级服务器nginx

这里写目录标题 一 nginx及其应用场景1.什么是nginx2.应用场景背诵 二 nginx的配置安装1.选择nginx版本2. 安装配置环境3.安装nginx4.启动nginx 三 访问 一 nginx及其应用场景 1.什么是nginx 一款轻量级的Web服务器,反向代理服务器,以及电子邮件代理服…

16.props

props是组件的自定义属性,可以提高组件的复用性,比如 做点击计数器的时候,我可以让计数器组件在A处赋初始值10,在B处赋初始值20 目录 1 基本用法 2 给默认值 default 3 值类型 type 4 是否必填 required 1 基本用法 pr…

【计算机网络】网络命令的使用

文章目录 一、实验目的二、实验工具三、实验要求四、实验过程01 ping 命令的使用应用1:验证本地计算机上是否正确安装了 TCP/IP 协议应用2:测试某个目的主机可达性应用3:键入 ping,查看 ping 的其他参数含义 02 netstat 命令的典型…

求你看完再去面试,涨薪必备分布式事务小抄,狂怼面试官~

分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式…

尚硅谷爬虫(解析_xpath的基本使用)笔记

1、xpath的基本使用 创建一个简单的HTML&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><ul><li>北京</li><li&…

华为OD机试真题(Java),数字涂色(100%通过+复盘思路)

一、题目描述 疫情过后&#xff0c;希望小学终于又重新开学了&#xff0c;三年二班开学第一天的任务是将后面的黑板报重新制作。 黑板上已经写上了N个正整数&#xff0c;同学们需要给这每个数分别上一种颜色。 为了让黑板报既美观又有学习意义&#xff0c;老师要求同种颜色的…