讨论怎么用随机化的方法,使得二叉搜索树在大部分状况下都能保持平衡?算法
一、排序数组
将数组构建为二叉搜索树,在进行中序遍历,就可顺序输出;数据结构
BST的时间复杂度为:O(nlogn);最坏状况:O(n^2);ide
BST与快速排序的算法思想极为类似;spa
二、随机化BSTblog
(1)、随机、均匀地打乱数组的序列;排序
(2)、BST排序;ip
随机化BST树,排序的算法时间复杂度:O(nlogn);get
随机化BST树的高度为:O(logn),因此查询数字的时间复杂度为:O(logn);博客
三、平衡搜索树
AVL树
2-3树
2-3-4树
B树
红黑树
跳跃表
树堆
四、红黑树
树的高度为:O(logn),其全部操做均在log(n)时间完成;
知足特征:
i、每一个结点不是红的就是黑的,色域:一个位进行表示;
ii、根结点和叶子结点都是黑色;
iii、每一个红色结点的父节点都是黑色;
iiii、从该结点到达叶节点的全部路径有相等的黑结点;(全部路径的黑高度是一致的)。
对iiii条进行模型说明:
RBtree的插入(红色结点):旋转算法,有些结点颜色可能的改变;
插入时间复杂度:O(logn);旋转的时间复杂度为:O(1);
RBtree的插入,插入结点以后,还的使树保持平衡;
插入算法的具体实如今前面博客中已经描述清楚。
区间树的底层数据结构是RBtree;