討論怎麼用隨機化的方法,使得二叉搜索樹在大部分狀況下都能保持平衡?算法
一、排序數組
將數組構建爲二叉搜索樹,在進行中序遍歷,就可順序輸出;數據結構
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;