数据结构与算法——2-3-4树详解java

2-3-4树的介绍

在二叉树中,每个节点有一个数据项,最多有两个子节点,当每个节点有多个数据项和更多的节点的话这就是多叉树,这里我说的2-3-4树就是一个多叉树,它的每个节点最多有三个数据项和四个节点,它和红黑树一样是讲究平衡的,它的效率比红黑树稍微差一些。但是编程比红黑树容易,其实最重要的是通过红黑树更容易了解B树,B树是另外的一种树,B树的节点可以有几十个或者几百个。
下面是一个小的2-3-4树
在这里插入图片描述
图中的三个节点有子节点,底层有两个叶子节点,2-3-4树中所有的叶子节点都会在一层,
2-3-4树听着名字就知道和2,3,4相关,下面我就详细的说一下为什么叫2-3-4树

  • 有一个数据项的总是有两个子节点
  • 有两个数据项的总有三个子节点
  • 有三个数据项的总是有四个子节点
    也就是说非叶节点的子节点树总比它含有的数据项多一,或者,用符号表示这个规则,假设子节点的连接数为L,数据项的个数是D ,那么L=D+1 这就是2-3-4树名字的含义
    这个关系决定的2-3-4树的结构,比较来说,叶节点没有子节点,然后他可能含有两个或者三个数据项,空节点是不会存在的
    因为2-3-4树最多可以有四个子节点,也可以称它为4叉树。

二叉树和2-3-4树的不同

我们知道二叉树可以只有一个子节点,指向它的左节点或者右节点,它的另一个链接可以为null值,然后在2-3-4树中不允许只有一个连接,有一个数据项的节点总是保持着两个链接,除非是它的叶节点,在那种情况下没有链接。
下面的图可以很好地看清楚2-3-4树的数据项与链接的节点
在这里插入图片描述

2-3-4树的组织

下面我讲解一下2-3-4树的组织以及排序
首先节点中的数据按照关键字值升序排列,习惯上从左到右的升序
我先来假设数据项是A,B,C因为最多只有三个数据项
节点的我按照1.2.3.4排列,最多有四个节点

  • 1节点里面的数据项都是比父节点的数据项中的A小
  • 2节点里面的数据项在父节点中大于A小于B的值
  • 3节点里面的数据项在父节点中是大有B小于C的值
  • 4节点里面的数据项都是大于C的值
    如下图
    在这里插入图片描述
    但是叶节点都是在同一层,也就是最底层的,上面层的节点一般都是不满的,也就是说,他们可能只含有一个或者两个数据项而不是三个
    注意:树是平衡的,即使插入一组升序或者降序的数据在2-3-4树都能保持平衡,2-3-4树的自我平衡能力取决于新节点的插入方式

搜索2-3-4树

查找特定的值的数据项和二叉树搜索很类似,从根开始,除非查找的关键值就是根,否则选择关键子值所在的范围,转向那个方向直到查找到为止。下图就是假设查找关键字为64的数据项
在这里插入图片描述1. 首先判断是不是根,不是根就判断是不是比根大或者比根小
2. 比根大的时候走右边的子节点,然后判断是不是比60小或者在60-70之间,70-80之间 ,比80大
3. 当判断是在60-70之间就转到第二个子节点,就会找到关键字值为64的项,如果没有找到就会返回没找到

插入

新的数据项总是插入在叶子节点里面,在树的最底层,如果插入到右子节点的节点里面,子节点的编号就要发生变化,这样才能保持树的结构,保证子节点树比数据项里面的多1.
2-3-4树的插入有时很简单,有时相当复杂。无论哪一种情况都是从查找适当的叶节点开始的。
插入时没有碰到满节点时,插入很简单,找到合适的叶子节点后,只要把新数据项插入进去就可以了,如下图

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值