看图轻松理解数据结构与算法系列(2-3树)
前言
推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。
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树进行中序遍历能得到一个排好序的序列。
插入操作
刚开始是空树,插入节点“A”,创建根节点,
插入节点“B”,从根节点开始寻找存放的节点位置,与“A”节点合并后放到同一个叶子上,此时该叶子只包含“AB”两个项目,无需分裂,
继续插入节点“C”,从根节点开始寻找存放的节点位置,找到“AB”叶子节点,将其放进去,
但此时该叶子节点包含了“ABC”三个项目,需要将该节点进行分裂操作,分裂的具体过程如下,找到该节点三个项目中中间大的项,
上移成为最小项和最大项的父节点,而最小项作为中间项的左子节点,最大项作为中间项的右子节点。
继续插入“D”节点,从根节点开始寻找,
大于“B”,所以往右,
找到“C”节点,并合并到该叶子节点,该节点只有两个项目,不必分裂。
继续插入“E”,查找到“CD”叶子节点,放入“E”节点后发现该叶子节点有三个项目,需要分裂,
将中间项提升到父节点,其余两项分裂成两个子节点,“D”上升到父节点后存放在右边,而且父节点只有两个项目,不必再继续分裂。
继续插入“F”节点,
往下看连续分裂两次的情况,继续插入“G”节点,大于“B”,继续比较,
大于“D”,往右子节点,
到右子节点后与“F”比较,发现大于“F”,放到右边,
发现“EFG”叶子节点有三个项目,必须分裂,
将中间项“F”提升到父节点,“E”和“G”左右两项分别称为左右子节点,
提升到父节点后发现父节点包含了“BDF”三项,也需要分裂,于是准备将中间项“F”提升,
发现“BDF”节点本来属于根节点,那么分裂后就没有根节点了,于是需要创建一个新节点作为根节点,即提升的“D”节点作为新的根节点。“B”和“F”左右两项分别作为左右子节点。
总结起来就是:一个节点插入到一棵2-3树中,先寻找该节点应该落到哪个叶子节点上,注意一定是在叶子节点。将新节点作为一个新项加入到叶子节点中,此时如果该节点只有两个项目,则完成插入操作。但如果该节点有三个项目,则需要进行分裂操作,左中右三项按大小排序,将中间项提升到父节点中,而左右两项作为左右子节点,然后可能还没完,因为父节点上可能又包含了三个项目,如果是这样还得做分裂操作,一直递归到父节点只包含一个或两个项目。
查找
2-3树的查找与二叉树的查找类似,从根节点开始比较,如果相等则查找成功,否则往下继续查找,对于只有两个子节点的节点则在其左右子树中递归查找,而对于有三个子节点的节点则需要在左中右子树中递归查找。
如下2-3树,查找“C”节点,
从根节点开始,与“D”比较,“C”小于“D”则往左,
继续与“B”比较,“C”大于“B”则往右,
“C”与“C”相等,找到。
如果要查找“H”节点,从根节点开始,“H”大于“D”则往右,
在“FH”节点中逐个项比较,先跟“F”项比较,“H”大于“F”,继续比较下一项,
“H”等于“H”,找到,在“FH”节点中找到“H”。
如果要查找“G”节点,从根节点开始,“G”大于“D”则往右,
“G”与“FH”节点逐个比较,大于“F”,继续比较下一项,
“G”小于“H”,即“G”间于“F”和“H”之间,于是往中间,
“G”等于“G”,找到。
-------------推荐阅读------------
我的开源项目汇总(机器&深度学习、NLP、网络IO、AIML、mysql协议、chatbot)
为什么写《Tomcat内核设计剖析》
我的2017文章汇总——机器学习篇
我的2017文章汇总——Java及中间件
我的2017文章汇总——深度学习篇
我的2017文章汇总——JDK源码篇
我的2017文章汇总——自然语言处理篇
我的2017文章汇总——Java并发篇
跟我交流,向我提问:
欢迎关注:
看图轻松理解数据结构与算法系列(2-3树)相关推荐
- 看图轻松理解数据结构与算法系列(合并排序)
前言 推出一个新系列,<看图轻松理解数据结构和算法>,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握.本系列包括各种堆.各种队列.各种列表.各种树.各种图.各种排序等等几十篇的 ...
- 看图轻松理解斐波那契数列
前言 推出一个新系列,<看图轻松理解数据结构和算法>,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握.本系列包括各种堆.各种队列.各种列表.各种树.各种图.各种排序等等几十篇的 ...
- 认沽期权看图轻松理解
正如二级市场上有买方也有卖方,同理,与认购期权相对应的,是认沽期权.本篇文章就给大家解释一下什么是认沽期权.我们同样来看组图: 以上就是认沽期权的举例说明和解释
- 导师计划--数据结构和算法系列(上)
导师计划已经开始一个月了,自己的讲解的课程选择了数据结构和算法.这个系列的讲解分为上下两章,javascript语言辅助.本篇文章为上章,涉及的内容是基本的数据结构.在日本,晚上没事安排@-@,时间还 ...
- 导师计划 -- 数据结构和算法系列(上)
导师计划已经开始一个月了,自己的讲解的课程选择了数据结构和算法.这个系列的讲解分为上下两章,javascript语言辅助.本篇文章为上章,涉及的内容是基本的数据结构.在日本,晚上没事安排@-@,时间还 ...
- 数据结构和算法系列13 五大查找之哈希查找
原文地址 http://www.cnblogs.com/mcgrady/p/3294871.html 数据结构和算法系列13 五大查找之哈希查找 这一篇要总结的是五天查找的最后一篇,哈希查找,也称为散 ...
- 数据结构排序算法实验报告_[数据结构与算法系列]排序算法(二)
我的上一篇文章向大家介绍了排序算法中的冒泡排序.插入排序和选择排序.它们都是平均时间复杂度为 O(n^2) 的排序算法,同时还为大家讲解了什么是原地排序和什么是排序的稳定性.下图是这三种算法的比较,不 ...
- 11_JavaScript数据结构与算法(十一)树
JavaScript 数据结构与算法(十一)树 树结构 什么是树? 真实的树: 树的特点: 树一般都有一个根,连接着根的是树干: 树干会发生分叉,形成许多树枝,树枝会继续分化成更小的树枝: 树枝的最后 ...
- 数据结构与算法(C++)– 树(Tree)
数据结构与算法(C++)– 树(Tree) 1.树的基础知识 树(tree): 一些节点的集合,可以为空集 子树(sub tree): 树的子集 根(root): 树的第一个节点 孩子和父亲(Chil ...
最新文章
- java 遍历file_JAVA File类(文件的遍历,创建,删除)
- FlycoTabLayout使用
- NAT概念解释(不完全版,但不会搞错...)
- Hadoop hdfs 使用流来下载文件数据代码示例
- 二维数据和一维指针数组
- 使用程序简单查询IP地址
- Python input和raw_input的区别
- 乘法逆元---费马小定理扩展欧几里得
- 代理猎手(Proxy Hunter)使用详细教程
- java屠龙_倚天屠龙之江湖神器
- PS去除图片上的文字
- 魔兽争霸3地图加密,支持重制版-魔兽争霸3地图加密实操,魔兽地图加密工具
- ems与nms_求教OMC、EMS、NMS的区别和不同?
- 关于MybatisPlus
- 功率电感的两个额定电流 Isat 与 Irms
- opencv 中x,y,height, width,rows,cols 的关系
- python控制nao机器人身体动作实例
- python在线编程练习_有哪些在线编程练习网站?
- 填补国内空白 午芯高科国产首款“电容式”高分辨率MEMS气压计芯片率先上市
- axios 的 qs库
热门文章
- dnf最新开的服务器,DNF新玩法赛季服务器详解
- LaTeX不显示页码_Ubuntu(20.04 LTS) OS 下 VS Code + LaTeX 快速配置指南
- 数学建模用python分析gdp_【志领学院】HiMCM数学建模 商业事件建模分析——活动回顾...
- deep learning with python_d是什么意思_d的翻译_音标_读音_用法_例句_爱词霸在线词典...
- PPT放映时无法自动播放视频,同时自动播放两个视频
- python微信点赞收费吗_点赞关于怎样微信刷投票数,我来教你微信投票怎样花钱买票...
- lte载波聚合:激活与去激活
- Jupyter notebook的安装及使用
- 北京Yeslab安全实验室 现任明教教主
- 世界上最贵的摩托车是什么车?