树结构——2-3树图解
活动地址:CSDN21天学习挑战赛
学习2-3树原理是为了大家后面学习红黑树,B树打好坚实的基础,也能让我们更好的理解和学习。
原理:
2-3树是最简单的B-树(或-树)结构,其每个非叶节点都有两个或三个子女,而且所有叶都在统一层上。2-3树不是二叉树,其节点可拥有3个孩子。不过,2-3树与满二叉树相似。高为h的2-3树包含的节点数大于等于高度为h的满二叉树的节点数,即至少有2^h-1个节点。
这就是一个2-3树。一颗2-3树应该是这样的:
1. 满足二叉树的基本性质
2. 节点可以存放一个或两个元素
2节点:
3节点:
正是因为每个节点有2个或3个孩子,所以才叫2-3树。
所谓的2-3树满足二叉树的基本性质是指:在2-3树中,2节点的左孩子小于根节点,右孩子大于根节点;3节点的左孩子小于根节点的第一个元素,中间孩子的大小在两个根节点元素之间,右孩子元素大于根节点的第二个元素。
以刚才的图为例:
2节点 :左孩子 < a < 右孩子
3节点 :左孩子 < b < 中间孩子 < c < 右孩子
2-3树的绝对平衡
2-3树是一颗绝对平衡的树,所谓的绝对平衡是指在2-3树中从根节点到任意叶子结点所经过的节点数是一样的。
为了保持2-3树的绝对平衡,在元素插入时有以下特征:
如果插入位置节点的父节点的左右孩子都为空,则就和父节点进行融合
如果和一个三节点的节点融合,则可以先融合成四节点,四节点在拆分为以中间大小元素为根,较小元素为中间大小元素的左孩子,较大元素为中间大小元素的右孩子二叉树。若这颗二叉树的根不为2-3树的根,这需要将这个二叉树的根向上融合。
下面我使用图解的方式来让大家了解2-3树:
12应该插入到37左孩子位置,但37节点左右孩子均为空,因此需要进行融合,此时就是和一个3节点进行融合,可以先融合成一个4节点
由于2-3树中只能是2节点或3节点,所以还需要将4节点拆分出来,拆分成以中间大小元素为根,较小元素为中间大小元素的左孩子,较大元素为中间大小元素的右孩子二叉树。即:
6应该和12 18 所在的三节点融合,构成一个临时的四节点:
此时需要将4节点拆分:
以这种方式从根结点到任何叶子结点,保持下去整个2-3树保持绝对平衡。
树结构——2-3树图解相关推荐
- 超级详细树讲解三 —— B树、B+树图解+代码
首先很高兴你看到了这篇文章,这篇文章可能会花费你很长很长的时间去看,但是这篇文章包括的内容绝对足够你对树的一个系统性的学习.为什么要写这篇文字呢?因为自己在学习树的时候,有些博客只有图解,有些博客只有 ...
- java树结构_Java数据结构:树(Tree)
计算机科学中的树 在计算机科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合.它是由n(n>0)个有限节点组成一个具有 ...
- 全网最详细的2-3树图解
2-3树 定义: 2-3树是最简单的B-树(或-树)结构,其每个非叶节点都有两个或三个子女,而且所有叶都在统一层上.2-3树不是二叉树,其节点可拥有3个孩子.不过,2-3树与满二叉树相似.若某棵2-3 ...
- Treap(树堆)图解与实现
个人技术博客:http://blog.ztgreat.cn 前面我们介绍了AVL树,伸展树,它们都是二叉搜索树,二叉搜索树的主要问题就是其结构与数据相关,树的深度可能会很大,Treap树就是一种解决二 ...
- LSM树(日志结构合并树)总结-java版
目录 为什么要有LSM树 数据库存储引擎索引的底层结构 BTree的随机写特点 LSM树的诞生背景 简介 LSM树与B树的差异 LSM树优化 LSM树基本原理 LevelDB中的LSM HBase中的 ...
- 植树节,程序员要爬哪些“树”?
作者 | 程序猿小吴.进击的Hello_World 转载自五分钟学算法(ID: CXYxiaowu) 公历 3 月 12 日是一年一度的植树节.旨在宣传保护森林,并动员群众参加植树造林活动.说到树,程 ...
- 从B 树、B+ 树、B* 树谈到R 树
作者:July.weedge.Frankie.编程艺术室出品. 说明:本文从B树开始谈起,然后论述B+树.B*树,最后谈到R 树.其中B树.B+树及B*树部分由weedge完成,R 树部分由Frank ...
- python树结构_Python-简单的树结构实现
# 定义一个树结构 # 定义一个树状结构 class Node(): def __init__ ( self ,father= None ,data= None ,child= None ): sel ...
- B 树、B+ 树、B* 树
B 树.B+ 树.B* 树 作者:July.weedge.Frankie.编程艺术室出品. 说明:本文从B树开始谈起,然后论述B+树.B*树,最后谈到R 树.其中B树.B+树及B*树部分由weedge ...
最新文章
- 如何用 Python 分析 14 亿条数据?
- Only the original thread that created a view hierarchy can touch its views.
- 核心路由器聚焦三大关键点
- lombok 下的@Builder注解用法
- Eclipse常用设置
- 数据链路层协议_数据链路层 基本数据链路协议
- LeetCode第121题 买卖股票的最佳时机
- SX-BOX试用笔记
- QT + OpenCV 使用摄像头
- 方舟手游服务器延迟太高怎么办,方舟手机版服务器延迟太高 | 手游网游页游攻略大全...
- 苹果自带的清理软件_苹果电脑系统垃圾清理软件
- Lab3:自行车码表
- Cubieboard CC-A80性能之Ubuntu Linaro编译安装Node.js
- 第1章 数据库系统绪论
- 【mysql】流程控制函数
- 人生百味-2:钱和面子的关系
- 一种基于物理信息极限学习机的PDE求解方法
- 《梁启超家书》笔记三——交友取益,或读书取益,也要方面稍多,才有接谈交换,或开卷引进的机会
- Unity处理MP3流播放
- Python报错pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool解决方法