1. 程式人生 > >二叉樹、平衡二叉樹、B- tree、B+ tree 基本概念

二叉樹、平衡二叉樹、B- tree、B+ tree 基本概念

1 二叉樹 

        二叉樹binary tree是指每個節點最多含有兩個子樹的樹結構。

特點:

        1.所有節點最多擁有兩個子節點,即度不大於2

        2.左子樹的鍵值小於根的鍵值,右子樹的鍵值大於根的鍵值。因為二叉樹只是定義了簡單的結構,所以存在多種深度可能,導致二叉樹的效率低,所以引入了平衡二叉樹。

2 平衡二叉樹

2.1 avl樹

        平衡二叉樹,基於avl演算法,即是avl樹(avl tree)

特點:

        1.符合二叉樹的條件下

        2.任何節點的兩個子樹的高度最大差為1

        如果在avl 樹,中進行插入和刪除節點操作,可能導致avl樹失去平衡,那麼可以通過旋轉重新達到平衡。因此我們說的二叉樹也稱自平衡二叉樹。

2.2 紅黑樹

        紅黑樹和avl樹類似,都是在進行插入和刪除操作時通過特定的操作保持二叉樹的平衡,從而獲得較高的查詢效能。

特點:

        1.節點是紅色或黑色

        2.根節點是黑色

        3.葉子節點(nil,空節點)是黑色

        4.每個紅色節點的兩個子節點都是黑色

3 B-tree

        B通常理解成是Balance的意思,B- tree 就是B樹,簡稱平衡樹。

        B樹是平衡多路查詢樹(有多個查詢路徑,不止2個),是一種平衡的多叉樹。因為B樹是平衡樹,每個節點到葉子節點的高度都是相同的,這樣可以保證B樹的查詢是穩定的。

        使用B tree 可以顯著減少定位記錄時所經歷的中間過程,從而快速定位,加快存取速度。

        與二叉樹相比,B-tree利用多個分支(二叉樹只有2個分支)節點,減少了獲取記錄時所經歷的節點數,從而達到節省存取時間的目的。

特點:

        1.每個節點的關鍵字增多了,特別是B樹應用到資料庫中的時候。

        資料庫充分利用了磁碟塊的原理(磁碟資料的儲存採用的是塊的形式進行儲存,每個塊的大小一般為4k,每次去取資料的時候,就是取出這個4k的大小,而不是隻取出你想要的大小。就是說每次IO的時候,同一磁碟塊的資料都是一次性提取出來)。把樹的節點關鍵字增多後,樹的層級比原來二叉樹的層級少了,這樣就可以減少資料查詢的次數 ,降低複雜度了。

        2.所有的頁節點都在同一層上

B+ tree

        B+tree 是在 B- tree基礎上的優化,使其更適應儲存索引結構

        B- tree的結構中,每個節點不僅包括資料的key值,也包括data值。而每一頁的儲存空間都是有限的,如果data資料較大的時候,會導致,每一頁中儲存的key比較少,當儲存的資料量比較大時,同樣會導致B- tree的查詢深度很大,增加磁碟IO次數,進而影響查詢效率

        B+ tree中,非葉子節點上只儲存key的資訊,這樣可以加大每一頁中儲存key的數量,降低B+ tree的高度。

特點(與B- tree相比):

        1.非葉子節點只儲存key資訊

        2.所有葉子節點之間有一個鏈指標

        3.B+的非葉子節點只進行資料的索引,不會存實際的關鍵字記錄的指標,所有資料地址必須要到葉子節點才能獲取到,所以每次資料查詢的次數都一樣。