MIT算法导论九 二叉搜索树

二叉搜索树(BST)

对一颗二叉查找树的任何节点,该节点的左子树中的任何一个节点的值都小于等于该节点的值,该节点的右子树中的任何一个节点的值都大于等于该节点的值
最坏时间复杂度O(n),一般时间复杂度O(lgn)
二叉查找树的特征可知,采用中序遍历一棵二叉查找树,可以得到树中关键字有小到大的序列

如何构造性能良好的二叉搜索树?

随机化

BST sort与quicksort 的关系:

BST SORT(A) {  
  T = 0   // Create an empty BST  
  for i=1 to n  
    do Tree-Insert(T,A[i])  
  Perform an inorder tree walk of T  
}  

Ex. A = [ 3 1 8 2 6 7 5 ]


MIT算法导论九 二叉搜索树_第1张图片
建立二叉树
分析建立二叉树时间复杂,与快排完全一致
最好情况是完全二叉树,树完全是平衡的,高度也达到最小,时间复杂度为**Θ(nlgn)**
最差情况是当元素完全顺序或逆序时,生成的数就是一个链表,时间复杂度为**Θ(n^2^)**
基于快排的优化方案,自然就想到了随机化版本的BSTsort

先随机化的重新排列数组,然后再执行BST sort
快排的时间复杂度得BST sort的时间复杂度为Θ(nlgn)
进一步得到树的平均深度的期望:Θ(lgn)

我们关注的是平均高度而不是实际高度,即每个节点的高度和的平均值。而实际上,树的实际高度可能远大于logn


MIT算法导论九 二叉搜索树_第2张图片

要证明的定理是随机化BST建立的树的高度的期望确实是lgn
这样才能证明建立随机化二叉搜索树,查询的时间复杂度为Θ(nlgn)
证明过程略

你可能感兴趣的:(MIT算法导论九 二叉搜索树)