全球旧事资料 分类
要OLogN的时间,于是它的时间复杂度为ONlogN。
2
我们玩扑克牌的时候,习惯于每起得一张牌后,直接将它是插入到合适的位置,以实现顺序的排列。插入排序插入排序I
sertio
Sort正是运用了这种思想,方法是从原序列中取出下一个元素,插入排序然后再新序列中找到合适的位置并插入。使用线性表存储时,由于新序列中已有的元素是已经有序的,确定插入的位置时,可以使用二分查找二分查找Bi
arySearch,使时间降为OLogN。但二分查找是不同于扑克牌,在线性表中,我们只能把这个位置后面的元素一个个向后移动,才能插入这个元素,最坏情况下可能会移动所有的元素,时间为ON。为了加快插入,我们可以使用链表,这样插入的时间复杂度无论如何就变成了O1了,但是确定插入的合适的位置却变成了ON。总而言之无论是基于线性表还是基于链表的简单插入排序,时间复杂度都是ON。为了解决这种矛盾,人们发明了跳跃表跳跃表SkipList和二叉查找树二叉查找树Bi
arySearchTree,基跳跃表二叉查找树于这两种数据结构的排序的期望时间复杂度都是ONlogN。
2
3二叉查找树
二叉查找树Bi
arySearchTree是基于插入思想的一种在线的排序数据结构它又叫二叉搜索树在线的排序数据结构。在线的排序数据结构Bi
arySearchTree、二叉排序树Bi
arySortTree,简称BST。这种数据结构的基本思想是在二叉树的基础上,规定一定的顺序,使数据可以有序地存储。二叉查找树运用了像二分查找一样的查找方式,并且基于链式结构存储,从而实现了高效的查找效率和完美的插入时间。
二、二叉查找树1二叉查找树的定义、遍历与查找二叉查找树的定义、
f1定义
13245
图SEQ图ARABIC1
二叉查找树Bi
arySearchTree或者是一棵空树,或者是具有下列性质的二叉树:二叉查找树
123
若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉查找树。
4
上述性质被称为BST性质可以看出,性质。二叉查找树是递归定义的,如图1是一个二叉查找树。代码1给出了一个BST节点的定义。structBST_NodeBST_Nodeleftright节点的左右子树的指针节点的左右子树的指针i
tvalue节点的值节点的值
代码1
2遍历
对于一个已知的二叉查找树,从小到大输出其节点的值,只需对其进行二叉树的中序遍历中序遍历,中序遍历即递归地先输出其左子树,再输出其本身,然后输出其右子树。遍历的时间复杂度为ON。代r
好听全球资料 返回顶部