二叉搜索樹(Binary Search Tree)

二叉搜索樹算法

  若既要求對象集合的組成能夠高效率的動態調整,同時也要求可以高效率的查找。 數據結構

經過對二分查找策略的抽象與推廣,定義並實現二叉搜索樹結構,基於半線性的樹形結構,正是後續內容的立足點和出發點。
spa

二叉搜索樹爲咱們同時實現高效的靜態操做以及動態操做提供了基礎。3d

   

 

 

 

 將Binary Search Tree稱爲BST. BST與其餘BT有什麼不一樣呢?歸納起來就是到處知足順序性:對象

  任一節點均不小於/不大於/其左/右後代。
blog

 

 

 

 

   BST的中序遍歷必然是單調非降:在微觀上到處知足順序性,在宏觀上總體知足單調性。模板

  

 

BST模板類:效率

  

 

 BST的查找算法:基礎

  

 

 

  1.對根節點進行一次比較,在有序向量中,對應於基於某個軸點進行比較,摒棄掉樹的左子樹,也是摒棄掉向量的左側向量。、二叉樹

  2.每一次都會摒棄掉一顆子樹或者一個子向量。

  3.如此往復,到最後收縮爲只有一個元素。

  減而治之策略:

  實現代碼:時間複雜度不會超過樹的高度。

 

 

  

 

 

 

 

 


 

 BST之插入: 先查找再插入一個新的節點

  

 

 

 

 

 


 BST刪除操做:

  

 

 刪除狀況一:若*x(69)的某一子樹爲空,則可將其替換爲另外一顆子樹(64)

  

 

 

 

  

 

 

 狀況二:

  

 

 狀況二代碼:

  

 

 討論下刪除的複雜度:

   複雜度不會超過全樹的高度O(h),咱們沒法控制最壞狀況下的複雜度,即樹的高度h,當樹退化成一條單鏈時(在數據結構上即BST退化成list),其複雜度高達O(n).

 

 

 隨機生成和隨機組成:隨機組成的高度是根號下n。更可信

  

 

 


 

 

 2、下降樹的高度,來減少複雜度,當兄弟子樹的高度越接近平衡,全樹葉將傾向於更低。徹底二叉樹和滿二叉樹多麼完美啊,可是實際應用中不具備意義啊,好比對它們進行刪除或插入時,也會失去完美的平衡,哎,悲傷。

  

 

 因此咱們要適當放鬆平衡標準,適度平衡的BST,稱做平衡二叉搜索樹(Balanced Binary Search Tree).

  

 

 BBST是BST的一個子集,若是在進行某次刪除或插入操做之後,BBST跑出了這個子集,變成了一顆BST,那麼咱們應該怎樣把它從新拉回到BBST裏呢? 答案是等價變換

 

 

 中序遍歷的歧義性:兩顆中序遍歷相同的BST,其拓撲結構多是不一樣的。

  

 

 

 

 

 累積須要執行的操做次數不能過多,至多不能超過O(logn),變換應該發生在局部。

  

相關文章
相關標籤/搜索