2-3樹:是一種多路查找樹,包含2結點和3結點兩種結點,其所有葉子結點都在同一層次。
2結點:包含一個關鍵字和兩個孩子(或沒有孩子),其左孩子的值小於該結點,右孩子的值大於該結點。
3結點:包含兩個關鍵字和三個孩子(或沒有孩子),其左孩子的值小於關鍵字最小值,右孩子的值大於關鍵字最大值,中間孩子的值介於兩個關鍵字之間。
2-3-4樹:類似於2-3樹,4結點包含三個關鍵字和四個孩子。
B樹:是一種平衡的多路查找樹,2-3樹和2-3-4樹都是B樹的特例,樹中各結點中最大的孩子數目稱為B樹的階。
一個m階的B樹,或為空樹,或為滿足以下特性的m叉樹:
①樹中每個結點至多有m棵子樹;
②各根結點不是終端結點,則至少有2課子樹;
③除根結點外所有非葉節點至少有⌈m/2⌉(向上取整號)課子樹;
④所有非葉結點的結構:{n,p0,k0,p1,k1,……kn,pn};
⑤所有的葉子結點出現在同一層次,不帶信息。
B樹的查找:多路查找,類似於二叉樹的查找。
B樹的插入:在B樹中找到待插入的位置后,並不能簡單的將其插入到終端結點的位置,因為此時可能會導致整棵樹不再滿足B樹中的要求。應依次把值待定的放入結點中,當結點的數超過規定的關鍵字數時進行分裂。
B樹的刪除:與插入操作類似,但需要使得刪除后結點中的關鍵字個數>=⌈m/2⌉-1,因此將涉及結點的“合並”問題,分以下情況討論:
①如果刪除的關鍵字在終端結點上(最底層非葉子結點):
①結點的關鍵字數量大於⌈m/2⌉-1,這時刪除這個關鍵字不會破壞B樹的定義要求,所以直接刪除;
②結點內關鍵字數量等於⌈m/2⌉-1,並且其左右兄弟結點中存在關鍵字數量大於⌈m/2⌉-1的結點,則去兄弟結點中借關鍵字;
③結點內關鍵字數量等於⌈m/2⌉-1,並且其左右兄弟結點中不存在關鍵字數量大於⌈m/2⌉-1的結點,則需要進行結點合並;
②如果刪除的關鍵字不再終端結點上(最底層非葉子結點):需要先轉換到終端結點上,再按照終端結點上的情況來刪除,其轉換到終端結點的方法為:
①存在關鍵字數量大於⌈m/2⌉-1結點的左子樹或者右子樹,在對應子樹上找到該關鍵字的相鄰關鍵字(就是這個大小序列中該關鍵字的直接前驅或者直接后繼),然后將相鄰關鍵字替換待刪除的關鍵字;
②若左右子樹的關鍵字數量均等於⌈m/2⌉-1,則將這兩個左右子樹結點合並,然后刪除待刪除關鍵字。
B+樹:是常用於數據庫和操作系統文件系統中的一種用於查找的數據結構,m階B+樹與B樹的主要差異在:
①在B+樹中,具有n個關鍵字的結點只含有n棵子樹,即每個關鍵字對應一顆子樹;而在B樹中,具有n個關鍵字的結點含有(n+1)棵子樹;
②在B+樹中,每個非根結點關鍵字個數n的范文是⌈m/2⌉<=n<=m(根結點1<=n<=m),在B樹中,每個非根結點關鍵字的個數n范圍是⌈m/2⌉-1<=n<=m-1;
③在B+樹中,葉結點包含信息,所有非葉結點只起到索引的作用,非葉結點中的每個索引項只含有對應子樹的最大關鍵字和指向該子樹的指針,不含有該關鍵字對應記錄的存儲地址;
④在B+樹中,葉結點包含了全部關鍵字,即在非葉結點中出現的關鍵字也會出現在葉結點中;而在B樹中,葉結點包含的關鍵字和其他結點包含的關鍵字是不重復的。