PROCEDURE Delete(tree: Tree; key: Objects.Object);
(* precondition: key must be comparable to
other objects of tree;
deletes object out of the tree that is identical
to key if present
*)
VAR
parent, node: Node;
PROCEDURE DeleteNode(VAR node: Node);
(* ... naechste Folie ... *)
END DeleteNode;
BEGIN (* Delete *)
ASSERT(tree.comparable(key));
IF ~Find(tree, key, parent, node) THEN RETURN END;
IF parent = NIL THEN
DeleteNode(tree.root);
ELSIF parent.left = node THEN
DeleteNode(parent.left);
ELSE
DeleteNode(parent.right);
END;
END Delete;
|