活动地址: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树图解相关推荐

  1. 超级详细树讲解三 —— B树、B+树图解+代码

    首先很高兴你看到了这篇文章,这篇文章可能会花费你很长很长的时间去看,但是这篇文章包括的内容绝对足够你对树的一个系统性的学习.为什么要写这篇文字呢?因为自己在学习树的时候,有些博客只有图解,有些博客只有 ...

  2. java树结构_Java数据结构:树(Tree)

    计算机科学中的树 在计算机科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合.它是由n(n>0)个有限节点组成一个具有 ...

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

    2-3树 定义: 2-3树是最简单的B-树(或-树)结构,其每个非叶节点都有两个或三个子女,而且所有叶都在统一层上.2-3树不是二叉树,其节点可拥有3个孩子.不过,2-3树与满二叉树相似.若某棵2-3 ...

  4. Treap(树堆)图解与实现

    个人技术博客:http://blog.ztgreat.cn 前面我们介绍了AVL树,伸展树,它们都是二叉搜索树,二叉搜索树的主要问题就是其结构与数据相关,树的深度可能会很大,Treap树就是一种解决二 ...

  5. LSM树(日志结构合并树)总结-java版

    目录 为什么要有LSM树 数据库存储引擎索引的底层结构 BTree的随机写特点 LSM树的诞生背景 简介 LSM树与B树的差异 LSM树优化 LSM树基本原理 LevelDB中的LSM HBase中的 ...

  6. 植树节,程序员要爬哪些“树”?

    作者 | 程序猿小吴.进击的Hello_World 转载自五分钟学算法(ID: CXYxiaowu) 公历 3 月 12 日是一年一度的植树节.旨在宣传保护森林,并动员群众参加植树造林活动.说到树,程 ...

  7. 从B 树、B+ 树、B* 树谈到R 树

    作者:July.weedge.Frankie.编程艺术室出品. 说明:本文从B树开始谈起,然后论述B+树.B*树,最后谈到R 树.其中B树.B+树及B*树部分由weedge完成,R 树部分由Frank ...

  8. python树结构_Python-简单的树结构实现

    # 定义一个树结构 # 定义一个树状结构 class Node(): def __init__ ( self ,father= None ,data= None ,child= None ): sel ...

  9. B 树、B+ 树、B* 树

    B 树.B+ 树.B* 树 作者:July.weedge.Frankie.编程艺术室出品. 说明:本文从B树开始谈起,然后论述B+树.B*树,最后谈到R 树.其中B树.B+树及B*树部分由weedge ...

最新文章

  1. 如何用 Python 分析 14 亿条数据?
  2. Only the original thread that created a view hierarchy can touch its views.
  3. 核心路由器聚焦三大关键点
  4. lombok 下的@Builder注解用法
  5. Eclipse常用设置
  6. 数据链路层协议_数据链路层 基本数据链路协议
  7. LeetCode第121题 买卖股票的最佳时机
  8. SX-BOX试用笔记
  9. QT + OpenCV 使用摄像头
  10. 方舟手游服务器延迟太高怎么办,方舟手机版服务器延迟太高 | 手游网游页游攻略大全...
  11. 苹果自带的清理软件_苹果电脑系统垃圾清理软件
  12. Lab3:自行车码表
  13. Cubieboard CC-A80性能之Ubuntu Linaro编译安装Node.js
  14. 第1章 数据库系统绪论
  15. 【mysql】流程控制函数
  16. 人生百味-2:钱和面子的关系
  17. 一种基于物理信息极限学习机的PDE求解方法
  18. 《梁启超家书》笔记三——交友取益,或读书取益,也要方面稍多,才有接谈交换,或开卷引进的机会
  19. Unity处理MP3流播放
  20. Python报错pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool解决方法

热门文章

  1. 分享几个在线生成头像的网站
  2. 应聘Java笔试时可能出现问题库及其答案(最全版)
  3. Android实现制作氢壁纸,氢壁纸怎么制作?氢壁纸制作方法介绍[图]
  4. 岗位和职责和划分在测试团队中的重要性
  5. 太强了!美团智能客服核心技术与实践,这差距不止一点点!
  6. mybatis处理joda datetime
  7. php:获取字符串的长度
  8. 黑马瑞吉外卖项目开发笔记
  9. mouseover,mouseout,mouseenter,mouseleave,hover
  10. mac邮箱无法验证账户名和密码问题