-
二三查找树的来源
二三查找树弥补了二叉查找树的缺点。
二叉查找树满足"左子节点小于父节点,右子节点小于父节点",如果我们以 9,8,7,6,5,4,3,2,1 的顺序插入一个二叉排序数,那么就会得到一个最坏的情况。如果我要查找 1 呢?岂不是很费时间??我们有没有办法去平衡这个二叉树?
为了平衡这个二叉树,就诞生了二三查找树
-
二三查找树的定义
(1)如图所示,绿色的节点叫"2-节点",红色的叫"3-节点"
(2)2-节点只能有2个子节点,3-节点只能有3个子节点
(3)2-节点必须满足左子节点的值比自己小,右子节点的值比自己大
(4)3-节点必须满足左子节点比自身最小的那个数还要小,中间子节点的值居于自身的小数和大数之间,右子节点比自身的大数还要大
-
二三查找树查找过程
以上图为例子,查找33这个元素
(1)33比49小,往左子数找
(2)33居于32和36之间,往中间子数找
(3)找到33了
-
二三查找树的插入过程
插入情况1:向2-节点中插入新建
例如插入一个37
(1)37比根节点49小,往左子数走
(2)37比大数36还要大,往右子树走
(3)37比40要小,此时,为了尽量不增加树的深度,所以把37插入到40的左边形成一个3-节点
结果如下图
插入情况2:向一颗含有一个3-节点的树中插入新建
有一颗树的初始状态如下图,我们要插入21
插入情况3:向一个父节点为2-节点的3-节点中插入新建
在这个树的基础上,插入67
插入情况4:向一个父节点为3-节点的3-节点中插入新建
以此树为基准,插入18
插入18完成
-
二三查找树的性质
通过对2-3树插入操作的分析,我们发现在插入操作的分析,我们发现在插入的时候,2-3树需要做一些局部的变量来保持2-3树平衡。
一棵完全平衡的2-3树具有以下性质:
(1)任意空链接到根节点的路劲长度都是相等的
(2)4-节点变换为3-节点时,树的高度不会发生变化,只有当根节点时临时的4-节点,分解节点时,树的高度+1
(3)2-3树与普通查找树最大的区别在于,普通查找树时自顶向下生长,而2-3树时自底向上生长的。