home *** CD-ROM | disk | FTP | other *** search
- External btree::delete(1);
-
- PROCEDURE DeleteLeftMost( VAR Employee : apointer;
- VAR DeleteName : shorty );
- { delete the leftmost node in the tree and }
- { returns its value in DeleteName }
- BEGIN
- IF Employee^.Left <> NIL THEN
- DeleteLeftMost( Employee^.Left, DeleteName )
- ELSE BEGIN
- DeleteName := Employee^.details.Name;
- Employee := Employee^.right
- END
- END{of DeleteLeftMost};
-
-
- PROCEDURE DeleteRoot( VAR Employee : apointer );
- { deletes the root of the nonempty tree by replacing it }
- { by its successor (or child) if it has only one, or }
- { replacing its value by that of the leftmost descendant }
- { of the rightmost subtree. }
- VAR
- DeletedName : shorty;
- BEGIN
- IF Employee^.Left = NIL THEN
- Employee := Employee^.right
- ELSE IF Employee^.right = NIL THEN
- Employee := Employee^.Left
- ELSE BEGIN
- DeleteLeftMost( Employee^.right, DeletedName );
- Employee^.details.Name := DeletedName
- END
- END{of DeleteRoot};
-
-
- PROCEDURE Delete( VAR Employee : apointer;
- key : shorty );
- { delete key from the tree--if it is not }
- { in the tree, do nothing }
- BEGIN
- IF Employee = NIL THEN
- WRITELN ( bell, key, ' not in data file' )
- ELSE IF key = Employee^.details.Name THEN
- DeleteRoot( Employee )
- ELSE IF key < Employee^.details.Name THEN
- Delete(Employee^.Left, key )
- ELSE IF key > Employee^.details.Name THEN
- Delete( Employee^.right, key )
- END;
-
- .
-