二叉查找树
2014-06-27 15:52
169 查看
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. 操作
1) 结构定义
2) 初始化
3) 销毁
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) 结构定义
2) 初始化
3) 销毁
4) 最小值
5) 最大值
6) 查找:分为递归和非递归版本
7) 插入
8) 删除
分3中情况:待删除结点为叶子结点;待删除结点有左孩子或又孩子;待删除结点有两个孩子。
9) 中序遍历
相关文章推荐
- 二叉查找树(BST)---删除节点
- 二叉查找树
- 二叉查找树
- 二叉查找树
- POJ 2418 Hardwood Species【二叉查找树】
- 二叉查找树
- 二叉查找树(Binary Search Tree)
- 二叉查找树的基类实现(四)
- 二叉查找树(二叉排序树)操作大全C++实现
- Mark 一个类...一个很简单的二叉查找树...
- 《算法导论》学习笔记--第十二章 二叉查找树
- 《算法导论》第12章 二叉查找树 (2)查找、插入与删除
- 第十二章二叉查找树
- 第十五章动态规划之“最优二叉查找树”
- 二叉查找树(三)
- 二叉查找树的基类实现(下)
- 算法导论-12-1-具有相同关键字元素的二叉查找树
- 二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)的比较
- 查找二叉查找树第N大的数
- 二叉查找树详解及C++实现