平衡查找樹
阿新 • • 發佈:2017-06-18
wid 之間 轉化 二叉查找樹 .com html 超過 htm -c 紅黑樹:在2-3樹的基礎上,用一條紅鏈接相連的兩個2-節點表示一個3-節點
紅黑樹的性質(重要):根黑,要麽紅要麽黑,紅的兒子黑,
到達某個節點,先在有序表裏查詢,找不到向下找,到達葉子節點,說明沒有關鍵碼。
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/
平衡查找樹