动态查找表
1.动态查找表的特点:表结构本身是在查找过程中动态生成的,即对于给定值key,若表中存在其关键字等于key的记录,则查找成功返回,否则插入关键字等于key的记录。
1.1二叉排序树
1.1.1定义:或者是一棵空树,或者是具有以下性质的二叉树:
(1)若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值
(2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值
(3)它的左、右在子树也分别为二叉排序树
通常,可取二叉链表作为二叉排序树的存储结构;
注:若数据元素的输入顺序不同,则得到的二叉排序树形态也不同
1.1.2二叉排序树的插入和删除
和次优二叉树相比,二叉排序树是一种动态链表。其特点是,树的结构通常不是一次生成的,而是在查找过程中,当树中不存在关键字等于给定值的结点时再进行插入。新插入的结点一定是一个新添加的叶子结点,并且是查找不成功时查找路径上访问的最后一个结点的左孩子或右孩子结点。
二叉排序树的中序遍历是有序的。这就是说,一个无序序列可以通过构造一个二叉排序树而变成一个有序序列,构造树的过程即对无序序列进行排序的过程。
1.1.3二叉排序树的查找分析
含有n个结点的二叉排序树的平均查找长度和树的形态有关。当先后插入的关键字有序时,构造的二叉排序树蜕变为单支树。树的深度为n,其平均查找长度为(n+1)/2(和顺序查找相同),这是最差的情况。显然,最好的情况是二叉排序树的形态和折半查找的判定树相同,其平均查找长度和log(2)n成正比。
1.2平衡二叉树
1.2.1定义:又称AVL树。它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右叉树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。
我们希望由任何初始序列构成的二叉排序树都是AVL树。因为AVL树上任何结点的左右子树的深度之差都不超过1,则可以证明它的深度和log n时同数量级的。由此,他的平均查找长度也和log n同数量级。
根据题,当平衡二叉树因插入节点而失去平衡时,仅需对最小不平衡子树进行平衡旋转处理即可。
1.2.2平衡树的查找分析
在平衡树上进行查找的过程和排序树相同,因此,在查找过程中和给定值进行比较的关键字个数不超过树的深度。因此,在平衡树上进行查找的时间复杂度为O(logn)。