資料結構(C) B 樹的插入和刪除

2021-09-10 14:08:11 字數 1768 閱讀 4856

b-樹定義:一種平衡的多路查詢樹。用作索引組織檔案,可減少訪問外存次數,提高訪問速度、減少時間。一棵m階b-樹或為空樹,或滿足下列特性:

1、樹中每個結點至多有m個子樹;(結點中的關鍵字個數最多m-1)

2、若根結點不是葉子結點,至少有兩棵子樹(根至少有乙個關鍵字)

3、除根結點外,其餘非葉子結點至少有m/2(下取整)棵子樹。(比關鍵字個數多乙個)

4.關鍵字的個數,範圍是: m/2(下取整)-1≤n≤m-1

5、所有的葉子結點都出現在同一層上,不帶資訊(可看成是外部結點或查詢失敗的結點,並不存在)

6.節點的表示:(n,a0,k1, a1,k2, a2, ……… kn, an),n:關鍵字的個數,a:指標,k:關鍵字

**插入過程說明:**b-樹的生成從空樹開始,逐個插入關鍵字。由於b-樹結點中的關鍵字個數必須≥m/2-1,每次插入乙個關鍵字不是在樹中增加乙個葉子結點,而是在最低層的某個非終端結點中新增乙個關鍵字。插入分兩種情況討論:

(1)若該結點的關鍵字個數刪除非終端節點:首先找到要刪除的關鍵碼所在結點,**用指標ai(右指標) 所指子樹中最小關鍵碼y代替ki,**然後在相應終端結點中刪去y,這樣就轉為刪除終端結點中的關鍵碼的問題了。

刪除終端節點:

(1)被刪關鍵碼所在結點中的關鍵碼個數》=[m/2],說明刪去該關鍵字後該結點仍滿足b-樹的定義。

這種情況最為簡單,只需從該結點中直接刪去關鍵字即可。

(2)被刪關鍵碼所在結點中關鍵碼個數n=[m/2]-1,說明刪去該關鍵字後該結點將不滿足b-樹的定義,需要調整。

調整過程分為兩種:

①如果其左右兄弟結點中有「多餘」的關鍵字,即與該結點相鄰的右(左)兄弟結點中的關鍵字數目大於[m/2]-1。

則可將右(左)兄弟結點中最小(大)關鍵字上移至雙親結點。而將雙親結點中小(大)於該上移關鍵字的最大(小)關鍵字下移至被刪 關鍵 字所在結點中。

父母中緊靠被刪關鍵字的下來,兄弟中緊靠被刪關鍵字的關鍵字上取

②被刪關鍵碼所在結點和其相鄰的左右兄弟節點中的關鍵碼個數均等於[m/2]-1,左右兄弟都不夠借。

需把要刪除關鍵字的結點與其左(或右)兄弟結點以及雙親結點中分割二者的關鍵字合併成乙個結點,即在刪除關鍵字後,該結點中剩餘的關鍵字加指標,加上雙親結點中的關鍵字ki一起,合併到ai(即雙親結點指向該刪除關鍵字結點的左(右)兄弟結點的指標)所指的兄弟結點中去。如果因此使雙親結點中關鍵字個數小於[m/2]-1,則對此雙親結點做同樣處理。以致於可能直到對根結點做這樣的處理而使整個樹減少一層。

父母節點中與被刪的關鍵字緊靠的關鍵字下來,然後去和兄弟節點合併

注意:發現母親節點也不夠刪除的時候,將母親節點這一層看做葉子,連帶著其孩子看著整體一起移動

資料結構 堆 堆的建立 插入和刪除

二 堆的插入 刪除操作 三 堆的建立 堆是乙個有固定順序的完全二叉樹,通常用陣列來表示。下圖是乙個堆常用的編號方式示意圖 根節點編號為0,根節點的左子節點編號為1 右子節點編號為2,再往下是3 4 5 6 即按照從上往下 從左往右的順序編號。在陣列中,就按照如上所述的下標進行儲存,如上圖儲存為陣列就...

順序表的插入和刪除(資料結構)

1.問題描述 順序表的插入和刪除是資料結構中比較基礎的,在插入部分要能夠做到在陣列頭部插入資料,在尾部插入資料,以及在指定位置插入指定資料。在刪除部分要能夠做到刪除尾部資料,刪除頭部資料,刪除指定位置的資料。2.問題分析 在物件中設定乙個屬性size來表示陣列中資料的長度,同時自然也少不了乙個屬性是...

資料結構 鍊錶的插入刪除

遍歷列印鍊錶 public static void printlinkedlist listnode head system.out.println 1 頭插 public static listnode pushfront listnode head,int val public static l...