home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol085
/
delete.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1984-04-29
|
1KB
|
52 lines
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;
.