if r is not the first record in L, then there is no need to fix the
key values at higher levels.
If r is the first record in L, then
-
if L is not the first child of its parent P, then set the key value
in P's entry for L to be the new first key value in L
-
if L is the first child of P, the key of r is not recorded in P;
locate the lowest ancestor A of P such that L is not the leftmost
descendent of A and set the appropriate key value in A.
Case 2: L becomes empty after deletion of r
Return L to the file system
Adjust the keys and pointers in P (parent of L) to reflect the
removal of L
If the number of children of P now
< m/2,
examine the node P'
immediately to the left or the right. If P' has at least
1 + m/2children, distribute the keys and pointers in P and P' evenly between Pand P'.
-
Modify the key values for P and P' in the parent of P
-
If necessary, ripple the effects to as many ancestors of P as are
affected.
-
If the number of children of P' is exactly
m/2, we combine P and
P' into a single node with
2m/2
-1 children. Then remove the key and
pointer to P' from the parent for P'.
If the effects of deletion ripple all the way back to the root, combine the
only two children of the root. The resulting combined node is the new root and
the old root is returned to the file system. The number of levels decreases by
1.