B樹——插入和刪除


B樹——插入和刪除

B樹的插入

5階B數——結點關鍵字個數向上取整m/2-1≤n≤m-1

即2≤n≤4

連續插入5個元素后,超出來了。

在插入key后,若導致原結點關鍵字數超過上限,則從中間位置(m/2向上取整)將其中的關鍵字分為兩個部分,左部分包含的關鍵字放在原結點中,右部分包含的關鍵字放在新節點中,中間位置(m/2向上取整)的結點插入原結點的父節點

新元素一定是插入到最底層“終端結點”,用“查找”來確定插入位置

在插入key后,若導致原結點關鍵字數超過上限,則從中間位置(m/2向上取整)將其中的關鍵字分為兩個部分,左部分包含的關鍵字放在原結點中,右部分包含的關鍵字放在新節點中,中間位置(m/2向上取整)的結點插入原結點的父節點,again

若此時導致其父節點的關鍵字個數也超過了上限,則繼續進行這種分裂操作,直至這個過程傳到根節點為止,進而導致B樹高度增1

核心要求:

①對m階B樹——除根節點外,結點關鍵字個數m/2向上取整-1≤n≤m-1

②子樹0<關鍵字1小於子樹1<關鍵字2<子樹2<。。

新元素一定是插入到最底層“終端結點”,用“查找”來確定插入位置

在插入key后,若導致原結點關鍵字數超過上限,則從中間位置(m/2向上取整)將其中的關鍵字分為兩個部分,左部分包含的關鍵字放在原結點中,右部分包含的關鍵字放在新節點中,中間位置(m/2向上取整)的結點插入原結點的父節點。若此時導致其父節點的關鍵字個數也超過了上限,則繼續進行這種分裂操作,直至這個過程傳到根節點為止,進而導致B樹高度增1

B樹的刪除


刪除60

若被刪除關鍵字在終端節點,則直接刪除該關鍵字(要注意節點關鍵字個數是否低於下限m/2向上取整-1)

刪除80

找直接前驅后者直接后繼

若被刪除關鍵字在非終端節點,則用直接前驅后直接后繼替代被刪除的關鍵字

直接前驅:當前關鍵字左側指針 所指子樹中“最右下”的元素

直接后繼:當前關鍵字右側指針 所指子樹中“最左下”的元素

對非終端節點關鍵字的刪除,必然可以轉化為對終端節點的刪除操作

低於關鍵字數下限

刪除38

若被刪除關鍵字所在節點刪除前的關鍵字個數低於下限,且與此節點右(或左)兄弟節點的關鍵字個數還很寬裕,則需要調整該節點、右(或左)兄弟節點及其雙親結點(父子換位法)

其實就是在左右兄弟還很寬裕的時候,用當前結點的前驅(后繼)、前驅的前驅(后繼的后繼)來填補空缺

刪除90

左兄弟富裕,借下來

本質:永遠保證子樹0<關鍵字1小於子樹1<關鍵字2<子樹2<。。

刪除49

兄弟不夠借?

若被刪除關鍵字所在結點刪除前的關鍵字個數低於下限,且此時與該結點相鄰的左、右兄弟結點的關鍵字個數均=m/2向上取整-1,則將關鍵字刪除后與左(或右)兄弟節點雙親結點中的關鍵字進行合並

但是73這個位置又不夠關鍵字了。。。

把父節點的扒下來

知識回顧

5階


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM