查找
1.基本概念
1.查找表
用于查找的数据集合称为查找表,它由同一类型的数据元素组成,可以是一个数组或链表等数据类型。
对查找表的操作:
① 查找某个特定的数据元素是否在查找表中
② 检索满足条件的某个特定元素的各种属性
③ 在查找表中插入一个数据元素
④ 从查找表中删除某个数据元素
2.静态查找表
查找操作只涉及①和②,无须动态的修改查找表,此类查找表称为静态查找表。
需要动态的插入和删除的查找表称为动态查找表。
静态查找表:顺序查找、折半查找、散列查找等
动态查找表:二叉排序树的查找、散列查找。
3.平均查找长度
一次查找长度是指需要比较的关键字次数
2.顺序查找和折半查找
顺序查找
对顺序表和链表都是适用的。
折半查找
又称二分查找,它仅适用于有序的顺序表。
折半查找的过程可用如图所示的二叉树表示,称为判定树。判定树是一颗平衡二叉树。
分块查找
分块查找又称索引顺序查找。
将查找表分成若干个子块,块内元素可以是无序的,块之间是有序的。
查找过程:
第一步是先确定索引表中的块,可以顺序查找或折半查找索引表。
第二步是在块内顺序查找。
3.树型查找
二叉排序树
二叉排序树或是一颗空树,或是具有以下特征的二叉树:
- 若左子树非空,则左子树上所有结点的值均小于根节点的值。
- 若右子树非空,则右子树上所有结点的值均大于根节点的值。
- 左右子树分别也是一颗二叉排序树。
根据定义,左子树结点值 < 根节点值 < 右子树结点值
对二叉排序树进行中序遍历得到的是一个递增的序列。
二叉排序树的删除
平衡二叉树
定义
平衡二叉树可以定义为,或者是一颗空树,或者是具有以下性质的二叉树:
它的左右子树都是平衡二叉树,且左子树和右子树的高度差的绝对值不超过1.
插入
每当在二叉排序树中插入(或删除)一个结点时,首先检查其插入路径上的结点是否因此操作而导致了不平衡。若导致了不平衡则先找到插入路径上离插入节点最近的平衡因子的绝对值大于1的根节点A,再对以A为根的子树,在保持二叉排序树特征的前提下,调整各结点的位置关系,使之重新达到平衡。
1.LL平衡旋转(右单旋转)
2.RR平衡旋转(左单旋转)
3.LR平衡旋转(先左后右双旋转)
4.RL平衡旋转(先右后左双旋转)
其他理解
删除