private void DeleteFromInternalNode(FileStream File, int i) { TKey Key = Keys[i]; BNode <T, TKey> y = DiskRead(File, Degree, ChildrenPointers[i], ContentFactory, KeyFactory); if (y.N >= (Degree / 2 - 1)) { TKey KPrime = y.LeftGreatest(File); y.Delete(File, KPrime); Keys[i] = KPrime; } else { BNode <T, TKey> z = DiskRead(File, Degree, ChildrenPointers[i + 1], ContentFactory, KeyFactory); if (z.N >= ((Degree / 2) - 1)) { TKey KPrime = z.RightLowest(File); z.Delete(File, KPrime); Keys[i] = KPrime; } else { y.Keys[y.N] = Key; for (int j = 0; j < z.N; j++) { y.Keys[y.N + j + 1] = z.Keys[j]; } if (!y.Leaf) { for (int j = 0; j <= z.N; j++) { y.Keys[y.N + j + 1] = z.Keys[j]; } } for (int j = i + 1; j < N; j++) { Keys[j - 1] = Keys[j]; ChildrenPointers[j] = ChildrenPointers[j + 1]; } Keys[N - 1] = KeyFactory.CreateNull(); ChildrenPointers[N] = SizesNSpecialCharacters.NullPointer; DiskWrite(File, 65); y.DiskWrite(File, 65); z.DiskWrite(File, 65); y.Delete(File, Key); } } DiskWrite(File, 65); }