BST和RBtree

討論怎麼用隨機化的方法,使得二叉搜索樹在大部分狀況下都能保持平衡?算法

一、排序數組

  將數組構建爲二叉搜索樹,在進行中序遍歷,就可順序輸出;數據結構

  BST的時間複雜度爲:O(nlogn);最壞狀況:O(n^2);ide

wKioL1iphjrySK8YAAAYdiJUHuM528.png-wh_50


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條進行模型說明:

wKioL1ipkyXRxbSgAAAiRWlPMrI649.png-wh_50

  RBtree的插入(紅色結點):旋轉算法,有些結點顏色可能的改變;

  插入時間複雜度:O(logn);旋轉的時間複雜度爲:O(1);

  RBtree的插入,插入結點以後,還的使樹保持平衡;        

  插入算法的具體實如今前面博客中已經描述清楚。

  區間樹的底層數據結構是RBtree;

相關文章
相關標籤/搜索