資料結構之樹

2021-07-09 06:53:46 字數 3099 閱讀 8950

一、樹的基本概念

樹(tree)是元素的集合,樹有多個節點可以儲存元素

二、二叉樹

每個節點最多有兩個子節點的樹稱為二叉樹;常用來做二分查詢(binary search)等

三、b樹

即二叉搜尋樹(binary search tree),是一種特殊形態的二叉樹

1、所有節點最多擁有2個子節點

2、所有節點儲存乙個關鍵字

3、非葉子節點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹

b樹從根節點開始查詢,如果查詢關鍵字等於節點則命中。否則,如果查詢關鍵字小於節點關鍵字則進入左子樹查詢,如果查詢關鍵字大於節點關鍵字則進入右子樹查詢;如果左或右子樹指標為空,則表示沒有找到匹配的結果。

如果b樹的所有非葉子節點左右子樹節點數目差不多(平衡),則b樹的查詢效能逼近二分查詢。但它比連續記憶體空間的二分查詢的優點是改變b樹結構(插入或刪除節點)不需要移動大段記憶體資料,通常是常熟開銷。

但b樹在經過多次插入或刪除節點後會導致不同的結果,即不再平衡

四、平衡二叉樹

平衡二叉樹即是在b樹的基礎上新增了平衡演算法,使其保持良好的查詢效能

五、其他衍生b樹

b-樹、b+樹、b*樹都是多路搜尋樹,其中b+樹是b-樹的變體,b*樹是b+樹的變體

b-樹是專門進行查詢的多叉樹,指標數量為關鍵字數加1,所有關鍵字只出現一次,非葉子節點可命中,效能相當於二分查詢,避免了失平衡問題,但需要節點**和合併

1、b-樹

1)所有非葉子節點最多有m個子節點;且m > 2

2)根節點的子節點數目為[2, m],非根非葉子節點的子節點數目為[m/2, m]

3)每個節點存放關鍵字的數量為m/2 -1(向上取整)到 m-1個(最少2個)

4)非葉子節點關鍵字個數 = 指向子節點指標個數 - 1

5)非葉子節點的關鍵字k[1]...k[m-1],且k[i] < k[i + 1]

6)非葉子節點的指標p[1]...p[m],p[1]指向關鍵字小於k[1]的子節點,p[m]指向關鍵字大於k[m - 1]的子節點;其他p[i]指向關鍵字屬於(k[i-1],k[i])的子節點

7)所有葉子節點位於同一層

一顆三路b-樹

b-樹從根節點開始搜尋,對節點內關鍵字(有序)序列進行二分查詢,如果命中則結束;否則進入查詢關鍵字所屬範圍的子節點;重複;直到所對應的子節點指標為空或已經是葉子節點

鑑於以上的定義使得b-樹具有以下特性:

1)關鍵字集合分布在整棵樹中

2)任何關鍵字出現且只出現在乙個節點中

3)搜尋有可能在非葉子節點結束

4)搜尋效能等價於在關鍵字全集內做一次二分查詢

5)自動層次控制

由於除根以外的非葉子節點至少有m/2個子節點,能夠確保節點的最低利用率,最差搜尋效能為:

說明:m為最大子節點個數,n為關鍵字總數;可以看出b-樹的查詢效能與二分查詢相同,都為o(log2n),與m值無關,也沒有b樹的平衡問題;但是由於m/2的限制,在插入或刪除節點時需要對節點進行拆分或者合併操作

2、b+樹

b+樹是b-樹的變體,指標數量與關鍵字數量相等,同一關鍵字可能出現多次,所有關鍵字都在葉子節點出現,並通過鍊錶連線,適合檔案系統

b+樹的定義與b-樹基本相同,除了:

1)非葉子節點的子節點個數與關鍵字個數相等

2)非葉子節點指標p[i]指向關鍵字屬於[k[i], k[i+1]]的子節點(與b-樹不同,b-樹是開區間)

3)所有關鍵字都在葉子節點出現,並且所有葉子節點都含有乙個鏈指標

例:最大子節點為3的b+樹

b+樹搜尋與b-樹相同,但是只在葉子節點才命中,效能也等價於一次二分查詢

b+樹的特性:

1)所有關鍵字都在葉子節點的鍊錶中(稠密索引),而且是關鍵字有序的

2)不可能在非葉子節點命中

3)非葉子節點相當於葉子節點的索引(稀疏索引),葉子節點相當於儲存資料(關鍵字)的資料層

4)適合檔案索引系統

3、b*樹

b*樹是b+樹的變體,在非根和非葉子節點層增加指向兄弟的指標,同時定義非葉子節點關鍵字個數至少為(2/3)m,即塊的最低使用率為2/3(b+樹為1/2)

**對比:

b+樹:分配新節點時,將1/2的資料拷貝至新節點,在父節點中新增新節點的指標

b*樹:先確定兄弟節點是否已滿 (1) 如不滿則先移動一部分資料到兄弟節點,再新增新關鍵字,最後修改父節點中的兄弟節點關鍵字;(2)如兄弟節點已滿,則分配新的節點,並從自身和兄弟節點各移動1/3的資料到新節點,最後在父節點中新增新節點指標

相對於b+樹,b*樹通過兄弟節點的指標進一步提高空間利用率,並且降低了分配新節點的概率;但是操作相對複雜一些

簡單小結:

b樹:二叉樹,每個結點只儲存乙個關鍵字,等於則命中,小於走左結點,大於走右結點;效能基本上等於二分查詢,有失平衡問題

b-樹:多路搜尋樹,每個結點儲存m/2到m個關鍵字,非葉子結點儲存指向關鍵字範圍的子結點;所有關鍵字在整顆樹中出現,且只出現一次,非葉子結點可以命中;二分查詢效能

b+樹:在b-樹基礎上,為葉子結點增加鍊錶指標,所有關鍵字都在葉子結點中出現,非葉子結點作為葉子結點的索引;b+樹總是到葉子結點才命中;二分查詢效能

b*樹:在b+樹基礎上,為非葉子結點也增加鍊錶指標,將結點的最低利用率從1/2提高到2/3;同樣是二分查詢效能

資料結構之 樹

1.雙親表示法 下標 資料 parentid 2.孩子表示法 data child1 child2 child3 3.雙親孩子表示法 下標 parentid firstchildid secondchildid 節點 下標 next 頁的話next應該是null 4.孩子兄弟表示法 data 第一次...

資料結構之樹

樹是節點的有限集合.度 a的度是3 b的度是2 d的度是2 c的度為0 當前節點的直接分支 葉子 終端節點就是葉子 e f g h c 根 非終端節點就是根 a b d 有序樹 如果e f不可以隨意換順序 就是有序樹 無序樹 如果 e f可以隨意換順序而且不影響邏輯 祖先 對e來說 b,a都是祖先 ...

資料結構之樹

1.樹是什麼?樹是n個結點組成的一種非線性結構。2.樹的屬性 1 父母 孩子和兄弟結點 結點的前驅結點稱為父母結點,後繼結點是孩子,相同父母結點的結點稱為兄弟。2 度 結點的度指的是擁有子樹的數量。葉子結點的度為0,樹的度是結點的度的最大值。3 結點層次,樹的高度 結點的層次指的是結點處於樹的層次位...