二叉樹、平衡二叉樹、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+的非葉子節點只進行資料的索引,不會存實際的關鍵字記錄的指標,所有資料地址必須要到葉子節點才能獲取到,所以每次資料查詢的次數都一樣。