二叉查找树

来源:互联网 发布: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. 操作

1) 结构定义

 


2) 初始化

 


3) 销毁


4) 最小值


5) 最大值


6) 查找:分为递归和非递归版本


7) 插入


8) 删除
        分3中情况:待删除结点为叶子结点;待删除结点有左孩子或又孩子;待删除结点有两个孩子。
 


9) 中序遍历


0 0
原创粉丝点击