home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power Programming
/
powerprogramming1994.iso
/
progtool
/
microcrn
/
issue_49.arc
/
GENSORT.ARC
/
BINTREE.M2
next >
Wrap
Text File
|
1989-07-11
|
2KB
|
71 lines
(* Micro Cornucopia Magazine Issue #49
Units and Modules Figure 2 - Binary tree unit *)
unit GenBinTree;
(*
Author: Michael S. Hunt Date: June 1, 1989
This source code is release into the public domain.
*)
interface
type dataPtr = ^data;
data = char;
treePtr = ^treeNode;
treeNode = record
llink, rlink : treePtr;
data, key : dataPtr;
datalen, keyLen : word
end (* treeNode *);
procedure GenBinInsert (var node : treePtr; key : dataPtr; keyLen : word;
data : dataPtr; dataLen : word);
procedure GenBinRetDelSmRec (var node : treePtr;
var key : dataPtr; var keyLen : word;
var data : dataPtr; var dataLen : word);
implementation
procedure GenBinInsert (var node : treePtr;
key : dataPtr; keyLen : word;
data : dataPtr; dataLen : word);
begin
if node = NIL then
begin
new(node);
node^.data := data;
node^.dataLen := dataLen;
node^.key := key;
node^.keyLen := keyLen;
node^.llink := NIL;
node^.rlink := NIL
end
else if key^ < node^.key^ then
GenBinInsert(node^.llink, key, keyLen, data, dataLen)
else if key^ >= node^.key^ then
GenBinInsert(node^.rlink, key, keyLen, data, dataLen)
end (* GenBinInsert *);
procedure GenBinRetDelSmRec (var node : treePtr;
var key : dataPtr; var keyLen : word;
var data : dataPtr; var dataLen : word);
var delNode : treePtr;
begin
if node^.llink = NIL then
begin
data := node^.data;
dataLen := node^.dataLen;
key := node^.key;
keyLen := node^.keyLen;
delNode := node;
node := node^.rlink;
Dispose(delNode);
end
else
GenBinRetDelSmRec(node^.llink, key, keyLen, data, dataLen)
end; (* GenBinRetDelSmRec *)
begin
end.