1. 程式人生 > >平衡查找樹

平衡查找樹

wid 之間 轉化 二叉查找樹 .com html 超過 htm -c

2-3查找樹:包含2-(一個鍵,兩條鏈)節點和3-(兩個鍵,三條鏈)節點的查找樹

      所有空鏈到根節點的距離相同

      插入時:當插入的值導致節點變四叉時進行分裂,將中間的值傳給上一個節點,

          並將另外兩個值作為兩個子節點分開,若上一節點也因此變成四叉,

          依次類推

     它是由下向上生長的

    插入和查找操作訪問節點不超過lgN個,所以時間復雜度為lgN,在最壞的情況下任有較好的性能

    (當按照升序插入10個鍵會得到高度為9的2-查找樹,但是使用2-3查找樹的高度為2)

技術分享

紅黑樹:在2-3樹的基礎上,用一條紅鏈接相連的兩個2-節點表示一個3-節點

      (圖中a是紅節點,即紅鏈接的左下)

  技術分享

另一種定義: 滿足紅鏈接均為左連接,沒任一節點同時和兩條紅連接相連,

      任意空鏈接到根節點的路徑上的黑鏈接數量相同的二叉查找樹

技術分享

在實際操作中可能會出現紅右鏈接或兩條連續紅鏈接,所以需要旋轉,左旋,或者右旋

技術分享

技術分享

變色:

技術分享

插入操作:分三種情況,

      1.新鍵大於原樹的兩個鍵:插在右邊,變色

      2.新鍵在兩鍵之間:插在較小的右邊,左旋,右旋,變色

      3.新鍵小於兩鍵:插在較小的左邊,右旋,變色

技術分享  

實際上這三種情況是互相轉化的,情況2,3都是轉化成1再變色的

技術分享

紅黑樹的性質(重要):根黑,要麽紅要麽黑,紅的兒子黑,

        從一個節點到其所有子孫節點所有路徑包含相同的黑

B樹:將2-3樹一般化,將每個節點的鍵值對增加到 m-1個(相當於有序表),所有節點都帶有關鍵碼

    到達某個節點,先在有序表裏查詢,找不到向下找,到達葉子節點,說明沒有關鍵碼。

B+樹:只有葉子節點帶有關鍵碼,為所有葉子節點增加一個鏈指針指向相鄰葉子,所有關鍵字都在葉子節點出現(而B樹不是)

B樹與紅黑樹最大的不同在於,B樹的結點可以有許多子女,從幾個到幾千個。那為什麽又說B樹與紅黑樹很相似呢?因為與紅黑樹一樣,一棵含n個結點的B樹的高度也為O(lgn),但可能比一棵紅黑樹的高度小許多,應為它的分支因子比較大。

參考:http://www.cnblogs.com/ivictor/p/5849061.html

   http://brianway.github.io/2016/10/14/algorithms-data-structures-2/

平衡查找樹