数据结构和算法学习(10)- 2-3-4树

来源:互联网 发布:基本款 外套 知乎 编辑:程序博客网 时间:2024/06/05 15:50

之前所提到的树全部都是二叉树,即每个节点有一个数据项,每个节点最多有两个子节点。

有多个数据项和更多子节点的树被称作多叉树,所要学习的2-3-4树就是一种多叉树,他的每个节点最多有四个子节点和三个数据项。

2-3-4树同红黑树一样是平衡树,他的效率稍差,但是编程更加容易

2-3-4树简介

2-3-4树名字中的2、3、4的含义指的是每个节点可能含有的子节点的个数

对于非叶结点有三种情况:

  • 有一个数据项的节点总是有两个子节点

  • 有两个数据项的节点总是有三个子节点

  • 有三个数据项的节点总是有四个子节点

也就是说,非叶结点的子节点数总是比他含有的数据项多1。

在二叉树中,节点最多有两个子节点的连接,而且可以只有一个连接;

而在2-3-4树中,不允许只有一个连接,有一个数据项的节点必须总是保有两个链接,除非他是叶结点,这种情况下可以没有连接

下图说明了2-3-4树中链与数据项关键字值之间的关系

2-3-4树搜索

查找特定关键字的数据项和在二叉树中搜索过程类似,从跟开始,除非查找的关键字就是根,否则选择关键字值所在的核实范围,转向那个方向,直到查到为止

2-3-4树插入

新的数据项总是插在叶结点里,在树的最底层

如果插入到有子节点的节点里,子节点的编号就要发生变化来保证树的结构

2-3-4树中插入节点有时比较简单,有时相当复杂,但是无论哪种情况都是从查找适当的叶结点开始。

如图所示插入数据项18:

涉及节点分裂

如果往下寻找要插入位置的过程中,节点已经满了,插入就变得复杂。

发生这种情况的话,节点就要分裂来保证树的平衡,如下图所示


还有一种更为特殊的情况,即一开始插入式就碰到满的根,如下图所示


2-3-4树和红黑树的转化

通俗来讲三条规则:

  • 2-3-4树的2-节点转换为红黑树的黑色节点

  • 2-3-4树的3-节点转换成一个子节点和一个父节点,子节点红色,父节点黑色

  • 2-3-4树的4-节点转换成一个父节点和两个子节点,子节点红色,父节点黑色

如图


2-3-4树的效率

分析2-3-4树的效率比红黑树要难,所以要从两者的等价性开始分析

红黑树的层数大概是log2(N+1),所以搜索时间与层数成正比

相同的数据而言,2-3-4树比红黑树的层数要少

2-3-4树每个节点最多可以有4个子节点,如果每个节点都是满的,树的高度应该和log4N成正比,所以在这种情况下2-3-4树的高度大概是红黑树的一半

不过这种情况几乎不可能发生,所以2-3-4树的高度大致在log2(N+1)和log2(N+1)/2之间

但是由于每个节点的数据项也会增加,同样会增加查找时间,所以大致算来2-3-4树中增加的每个节点的数据项数量可以抵偿树的高度的减少,所以2-3-4树中的查找时间与平衡二叉树大致相等,都是O(logN)













1 0