Ở đây chúng ta sẽ thấy, làm thế nào để thực hiện việc xóa một nút khỏi B + Tree. Giả sử chúng ta có B + Tree như dưới 7minus;
Ví dụ về B + Tree -
Xóa có hai phần. Lúc đầu, chúng ta phải tìm phần tử. Chiến lược đó giống như truy vấn. Bây giờ để xóa, chúng ta phải quan tâm đến một số quy tắc. Một nút phải có ít nhất m / 2 phần tử. Vì vậy, nếu chúng ta xóa, một phần tử và nó chỉ còn lại ít hơn m-1 phần tử, thì nó sẽ tự điều chỉnh. Nếu toàn bộ nút bị xóa, thì nút con của nó sẽ được hợp nhất và nếu kích thước của chúng bằng m, thì hãy chia chúng thành hai phần và một lần nữa giá trị trung bình sẽ tăng lên.
Giả sử chúng ta muốn xóa 78. Bây giờ có hai con. [75, 77], và [78, 85], sau đó Nó sẽ xóa 78 khỏi nút lá trước, sau đó lấy 85 và tạo một bản sao của khóa 85 và đặt nó làm gốc của cây con.
Thuật toán
BPlusTreeDelete (x, key) -
Đầu vào - Gốc của cây và khóa để xóa
We will assume, that the key is present into the list Start from root node, perform exact match for key as ‘key’ till a leaf node. Let the search path be x1, x2, … , xh. The x1 is first node so root, then xh is leaf node. Each node xi is parent of xi+1 delete the object where key is ‘key’ from xh. if h = 1, then return, as there is only one node which is root. i := h while xi underflows, do if immediate sibling node s of xi, has at least m/2 + 1 elements, then redistribute entries evenly between s and xi. corresponding to redistribution, a key k in the parent node xi-1, will be changed. if xi is non-leaf node, then k is dragged down to xi. and a key from s is pushed up to fill the place of k else k is simply replaced by a key in s return else merge xi with the sibling node s. Delete the corresponding child pointer in xi-1. if xi is an internal node, then drag the key in xi-1. which is previously divides xi and s. into the new node xi and s, into the new node xi. else delete that key in xi-1. i := i – 1 end if done