Реферат: Двоичные деревья поиска
Else
del = TreeNext(node); // Иначе следующую
If (del.left != NIL) Then // Пытаемся найти хоть одного потомка
nodeTemp = del.left;
Else
nodeTemp = del.right;
// Если есть, родителем потомка делаем родителя
// удаляемой вершины (случай 2)
If (nodeTemp != NIL) Then
nodeTemp.nodeParent = del.nodeParent;
// Если удаляем корень дерева, надо указать новый корень дерева
If (del.nodeParent == NIL) Then
Tree.root = nodeTemp;
Else
Begin
// Указываем родителю удаляемой вершины качестве потомка
// потомок удаляемой вершины
If (del.nodeParent.left == del) Then
del.nodeParent.left = nodeTemp;
Else
del.nodeParent.right = nodeTemp;
End
If (del != node) Then // Если случай 3
Begin
node.key = del.key; // Скопировать ключ
{ копирование дополнительных данных }
End
Return del;
End
NIL, NULL и маленькие хитрости