2 3查詢樹的插入與刪除

2021-08-01 10:45:29 字數 2061 閱讀 1060

本片部落格前面部分擷取自演算法(第4版)

定義:

要判斷乙個鍵是否存在樹中,先將它和根節點中的鍵比較,如果它和其中任意乙個相等,查詢命中;否則就根據比較的結果找到指向相應區間的連線,並在其指向的子樹中遞迴地繼續查詢,如果找到了空連線上,查詢未命中。

插入之前,先要對2-3樹進行一次未命中的查詢:

1、  向2-節點中插入新鍵

如果未命中查詢結束於乙個2-節點,直接將2-節點替換為乙個3-節點,並將要插入的鍵儲存在其中

2、  向一顆只含3-節點的樹中插入新鍵

先臨時將新鍵存入唯一的3-節點中,使其成為乙個4-節點,再將它轉化為一顆由3個2-節點組成的2-3樹,分解後樹高會增加1

3、  向乙個雙親節點為2-節點的3-節點中插入新鍵

先構造乙個臨時的4-節點並將其分解,分解時將中鍵移動到雙親節點中(中鍵移動後,其雙親節點中的位置由鍵的大小確定)

4、  向乙個雙親節點為3-節點的3-節點中插入新鍵

一直向上分解構造的臨時4-節點並將中鍵移動到更高層雙親節點,直到遇到乙個-2節點並將其替換為乙個不需要繼續分解的3-節點,或是到達樹根(3-節點)。

5、  分解根節點

如果從插入節點到根節點的路徑上全是3-節點,根將最終被替換為乙個臨時的4-節點,將臨時的4-節點分解為3個2-節點,分解後樹高會增加1

1、區域性變換

將對乙個4-節點的分解叫做變換,對乙個4-節點的變換方式可能有6種:

2、全域性性質:

變換不會影響樹的全域性有序性和平衡性,任意空鏈結到根節點的路徑長度依舊是相等的

後面部分參考自大話資料結構

插入之前,先要對2-3樹進行一次命中的查詢:

1、刪除非葉子節點key:

使用中序遍歷下的直接後繼節點key來覆蓋當前節點key,再刪除用來覆蓋的後繼節點key

2、刪除葉子節點key:

a)        當前節點不是2-節點,直接刪除key

b)        當前節點是2-節點,刪除節點,並作一些判斷:

a)        當前節點的雙親節點是2-節點、兄弟節點是3-節點,將雙親節點移動到當前位置,再將兄弟節點中最接近當前位置的key移動到雙親節點中

b)        當前節點的雙親節點是2-節點、兄弟節點也是2-節點,先通過移動兄弟節點的中序遍歷直接後驅到兄弟節點,以使兄弟節點變為3-節點;再進行a)的操作

c)        當前節點的雙親節點是3-節點,拆分雙親節點使其成為2-節點,再將再將雙親節點中最接近的乙個拆分key與中孩子合併,將合併後的節點作為當前節點

d)        2-3樹是一顆滿二叉樹,將2-3樹層樹減少,並將兄弟節點合併到雙親節點中,同時將雙親節點的所有兄弟節點合併到雙親節點的雙親節點中,如果生成了-4節點,再分解4-節點即可

2 3樹的插入和刪除原理

多路查詢樹 2 節點,含有乙個值和兩條鏈結 3 節點,含有兩個值和三條鏈結 所有葉子必須都在同一層次 建立乙個二節點作為根節點即可插入3 直接插入,將該二節點變為三節點即可 插入5 1.根據左小右大,5應該插到6的左邊,但是6所在的節點已經是三節點,且由於葉子節點必須要在同一層次 不能單獨往下延伸 ...

2 3樹的插入

2 3樹所有葉子都在同乙個層次,也就是說每一層的葉子數目都是相等的,如圖 一 插入資料3,插入的時候從根結點8發現,比8大往左走,到達4,發現比4小,繼續往左走,然後發現比1大,並且此時1結點只有乙個結點,所以可以插入,如圖 二.插入5 插入的時候從根結點8發現,比8大往左走,到達4,發現比4大,繼...

二叉搜尋樹的查詢,插入與刪除

二叉搜尋樹 binary search tree 又 二叉查詢樹,二叉排序樹 它或者是一棵空樹,或者是具有下列性質的二叉樹 1.若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 2.若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 3.它的左 右子樹也分別為二叉排序樹。str...