1.
引入
以顺序表作为存储结构的查找算法中,二分查找效率最高。但二分查找要求表按关键字有序,且不能用链表作存储结构,因此,当表的插入或删除操作频繁时,为维护表的有序性,势必要移动表中很多结点。这种由移动结点引起的额外时间开销,就会抵消二分查找的优点。也就是说,二分查找只适用于静态查找表。若要进行高效率的查找与删除操作,可采用动态查找表作为存储结构,如二叉查找树(Binary Search Tree)。
2. 二叉查找树定义
二叉查找树又称二叉排序树,定义为:二叉查找树或者是空树,或者是满足如下性质的二叉树:
①若它的左子树非空,则左子树上所有结点的值均小于根结点的值;
②若它的右子树非空,则右子树上所有结点的值均大于根结点的值;
③左、右子树本身又各是一棵二叉查找树。
3. 特点
1) 对二叉查找树进行查找、插入、删除操作的时间复杂度为O(h),其中h为二叉查找树的高度;
2) 随机构造的二叉查找树的的期望高度为O(logn)。
3) 若建构二叉查找树的输入序列有序,则得到的二叉查找树的高度将为O(n),进行基本操作的时间复杂度也为O(n)。
4) 中序遍历二叉查找树可得递增有序序列,时间复杂度为O(n),其中n为二叉查找树中结点数。所以,用二叉查找树的方法对序列进行排序,平均时间复杂度为O(n*logn),最坏情况为 。(注意:与快速排序复杂度是一样的)。
4) 最小值
5) 最大值
6) 查找:分为递归和非递归版本
7) 插入
8) 删除
分3中情况:待删除结点为叶子结点;待删除结点有左孩子或又孩子;待删除结点有两个孩子。
9) 中序遍历
以顺序表作为存储结构的查找算法中,二分查找效率最高。但二分查找要求表按关键字有序,且不能用链表作存储结构,因此,当表的插入或删除操作频繁时,为维护表的有序性,势必要移动表中很多结点。这种由移动结点引起的额外时间开销,就会抵消二分查找的优点。也就是说,二分查找只适用于静态查找表。若要进行高效率的查找与删除操作,可采用动态查找表作为存储结构,如二叉查找树(Binary Search Tree)。
2. 二叉查找树定义
二叉查找树又称二叉排序树,定义为:二叉查找树或者是空树,或者是满足如下性质的二叉树:
①若它的左子树非空,则左子树上所有结点的值均小于根结点的值;
②若它的右子树非空,则右子树上所有结点的值均大于根结点的值;
③左、右子树本身又各是一棵二叉查找树。
3. 特点
1) 对二叉查找树进行查找、插入、删除操作的时间复杂度为O(h),其中h为二叉查找树的高度;
2) 随机构造的二叉查找树的的期望高度为O(logn)。
3) 若建构二叉查找树的输入序列有序,则得到的二叉查找树的高度将为O(n),进行基本操作的时间复杂度也为O(n)。
4) 中序遍历二叉查找树可得递增有序序列,时间复杂度为O(n),其中n为二叉查找树中结点数。所以,用二叉查找树的方法对序列进行排序,平均时间复杂度为O(n*logn),最坏情况为 。(注意:与快速排序复杂度是一样的)。
4. 操作
1) 结构定义
4) 最小值
5) 最大值
6) 查找:分为递归和非递归版本
7) 插入
8) 删除
分3中情况:待删除结点为叶子结点;待删除结点有左孩子或又孩子;待删除结点有两个孩子。
9) 中序遍历