二叉查找树
来源:互联网 发布:ubuntu光盘安装教程 编辑:程序博客网 时间:2024/06/05 09:23
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) 中序遍历
0 0
- 查找--二叉查找树
- 二叉树、二叉查找树
- 二叉树 & 二叉查找树
- 【查找结构】二叉查找树
- 查找之二叉树查找
- 查找之二叉树查找
- 查找:二叉查找树总结
- 二叉树查找树...
- 二叉树查找树
- 查找--遍历二叉树
- 二叉查找树
- 二叉查找树实现
- 二叉查找树
- 动态二叉查找树
- 最优二叉查找树
- 二叉查找树
- 二叉查找树
- 平衡二叉查找树
- 程序员高手的软实力
- quartz2.2.1 example 03代码分析
- 深入讲解MySQL授权表
- [Java]Instrumentation
- Web服务器管理系列:11、注意默认的隐含共享
- 二叉查找树
- hdu 1081 & poj 1050 To The Max(最大和的子矩阵)
- 我的第一篇博客
- UIImagePickerController获取图片名
- cocos2dx 3.0 js继承:John Resiq的继承写法解析
- 『ANDROID』Android学习与记录
- java实现简单的动态代理
- 【Android】 Android开发优化之——从代码角度进行优化
- web.xml文件的作用