home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / microcrn / issue_49.arc / GENSORT.ARC / BINTREE.M2 next >
Text File  |  1989-07-11  |  2KB  |  71 lines

  1. (* Micro Cornucopia Magazine Issue #49
  2.    Units and Modules Figure 2 - Binary tree unit *)
  3.  
  4. unit GenBinTree;
  5.  
  6. (*
  7.   Author: Michael S. Hunt    Date: June 1, 1989
  8.   This source code is release into the public domain.
  9. *)
  10.  
  11. interface
  12.  
  13. type  dataPtr = ^data;
  14.       data = char;
  15.       treePtr = ^treeNode;
  16.       treeNode = record
  17.           llink, rlink : treePtr;
  18.           data, key : dataPtr;
  19.           datalen, keyLen : word
  20.       end (* treeNode *);
  21.  
  22. procedure GenBinInsert (var node : treePtr; key : dataPtr; keyLen : word;
  23.                        data : dataPtr; dataLen : word);
  24.  
  25. procedure GenBinRetDelSmRec (var node : treePtr;
  26.                             var key : dataPtr; var keyLen : word;
  27.                             var data : dataPtr; var dataLen : word);
  28. implementation
  29.  
  30. procedure GenBinInsert (var node : treePtr;
  31.                        key : dataPtr; keyLen : word;
  32.                        data : dataPtr; dataLen : word);
  33. begin
  34.   if node = NIL then
  35.     begin
  36.       new(node);
  37.       node^.data := data;
  38.       node^.dataLen := dataLen;
  39.       node^.key := key;
  40.       node^.keyLen := keyLen;
  41.       node^.llink := NIL;
  42.       node^.rlink := NIL
  43.     end
  44.   else if key^ < node^.key^ then
  45.     GenBinInsert(node^.llink, key, keyLen, data, dataLen)
  46.   else if key^ >= node^.key^ then
  47.     GenBinInsert(node^.rlink, key, keyLen, data, dataLen)
  48. end (* GenBinInsert *);
  49.  
  50. procedure GenBinRetDelSmRec (var node : treePtr;
  51.                             var key : dataPtr; var keyLen : word;
  52.                             var data : dataPtr; var dataLen : word);
  53. var  delNode : treePtr;
  54. begin
  55.   if node^.llink = NIL then
  56.     begin
  57.       data := node^.data;
  58.       dataLen := node^.dataLen;
  59.       key := node^.key;
  60.       keyLen := node^.keyLen;
  61.       delNode := node;
  62.       node := node^.rlink;
  63.       Dispose(delNode);
  64.     end
  65.   else
  66.     GenBinRetDelSmRec(node^.llink, key, keyLen, data, dataLen)
  67. end; (* GenBinRetDelSmRec *)
  68.  
  69. begin
  70. end.
  71.