多叉树、2-3-4树

多叉树数组

每一个节点的子节点能够多于两个spa

2-3-4树blog

2-3-4树的非叶节点可能含有两个、三个或四个子节点,因此叫2-3-4树;2-3-4树的非叶节点最多能够有4个子节点,因此又叫4叉树。有两个子节点的节点叫2-节点,有三个子节点的节点叫3-节点,有四个子节点的节点叫4-节点。it

对非叶节点来讲,节点有一个数据项老是有两个子节点,节点有两个数据项老是有三个子节点,节点有三个数据项老是有四个子节点,非叶节点最多有三个数据项和四个子节点。效率

全部的叶节点都在同一层上。叶节点可能含有一个、两个或三个数据项,不存在空节点。搜索

2-3-4树的数据项的关键字也是有序的,和二叉搜索树同样;2-3-4树中通常不容许出现重复的关键字。im

2-3-4树也是平衡树,即便插入一列升序或降序的的数据它依然能保持平衡。数据

2-3-4树不可能所有都是满节点。img

效率比红黑树稍差。红黑树

查找

和二叉搜索树相似

插入

新的数据老是插在叶节点里,在查找插入的路径上,碰到满节点时,满节点要分裂,正是这种分裂保证了树的平衡。

分裂节点不是根节点的状况:

0、分裂节点的数据项分别是A、B、C

一、建立一个新的空节点,它是分裂节点的右兄弟节点

二、数据A不动,数据B上移到分裂节点的父节点中,数据C平移到新节点

三、断开分裂节点最右边的两个子节点,链接到新节点上

注意:节点分裂是把数据向上向右移动,正是这样的从新排列才保证了树的平衡。

分裂节点是根节点的状况:

一、建立新的根节点,建立新的右兄弟节点

二、其余都同样

一个插入

能够看到即便插入有序的数列,2-3-4树也能够保持平衡,由于它从不产生子节点,只产生父节点。

还能够看到叶子节点总在一层,由于老是插入在叶节点,即便叶节点满了,也只会产生新兄弟节点。

也不会存在空的叶节点,由于叶节点是分裂而来,分裂的时候必定会给新节点赋值。

2-3-4树不可能所有都是满节点。

2-3-4树的实现

Node类的实现能够包括两个数组,itemArray[3]和childArray[4],itemArray是有序数组。

2-3-4树的效率

2-3-4树比相同数据项的红黑树层数少。红黑树的层数大约是log2(N+1);若是2-3-4树的每一个节点都是满的,那么它的高度是log4N,是红黑树的一半,不过2-3-4树的节点不可能都是满的,因此它的高度大于log2(N+1)/2之间。2-3-4树的高度小于红黑树的高度,因此它的高度小于log2(N+1)。整体来讲2-3-4树的高度在log2(N+1)到log2(N+1)/2之间。
另外一方面,2-3-4树要查看的数据项更多,这会增长查找时间。有的节点有一个数据项,有的节点有两个数据项,有的节点有三个数据项,平均是两个数据项,因此2-3-4树的查找时间大约是2*log4N。
2-3-4树增长的数据项能够抵偿高度的减小,所以查找时间和红黑树大体相等,都是O(LogN)

2-3-4树转换黑红树

规则:2-节点转化为一个黑色节点;3-节点转化为两个父子节点,父节点是黑色的,谁转化为父节点无所谓;4-节点中的第二个数据项转化为父节点,黑色。

相关文章
相关标签/搜索