Advertisement
Guest User

Untitled

a guest
May 21st, 2019
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.59 KB | None | 0 0
  1. unit uAlgo;
  2.  
  3. interface
  4.  
  5. type
  6.    PNode = ^TNode;
  7.    TNode = record
  8.       Left: PNode;
  9.       Right: PNode;
  10.       Key: Byte;
  11.    end;
  12.  
  13. function Add(Node: PNode; Key: Byte): PNode;
  14. function Remove(Node: PNode; Key: Byte): PNode;
  15. external 'RemoveAlgo.dll' name 'Remove';
  16. function MaxDepth(Node: PNode): Byte;
  17. function Exists(Node: PNode; Key: Byte): Boolean;
  18. procedure DeleteAll(var Node: PNode);
  19.  
  20. implementation
  21.  
  22. procedure DeleteAll(var Node: PNode);
  23. begin
  24.    if Node <> nil then
  25.    begin
  26.       DeleteAll(Node.Left);
  27.       DeleteAll(Node.Right);
  28.       Dispose(Node);
  29.    end;
  30. end;
  31.  
  32. function MaxDepth(Node: PNode): Byte;
  33. var
  34.    LeftDepth, RightDepth: Byte;
  35. begin
  36.    if Node = nil then
  37.       MaxDepth := 0
  38.    else
  39.    begin
  40.       LeftDepth := MaxDepth(Node.Left);
  41.       RightDepth := MaxDepth(Node.Right);
  42.       if LeftDepth > RightDepth then
  43.          MaxDepth := LeftDepth + 1
  44.       else
  45.          MaxDepth := RightDepth + 1;
  46.    end;
  47. end;
  48.  
  49. function Add(Node: PNode; Key: Byte): PNode;
  50. begin
  51.    if Node = nil then
  52.    begin
  53.       New(Node);
  54.       Node.Left := nil;
  55.       Node.Right := nil;
  56.       Node.Key := Key;
  57.       Add := Node;
  58.    end
  59.    else
  60.       if Key > Node.Key then
  61.          Node.Right := Add(Node.Right, Key)
  62.       else
  63.          if Key < Node.Key then
  64.             Node.Left := Add(Node.Left, Key);
  65.    Add := Node;
  66. end;
  67.  
  68. function Exists(Node: PNode; Key: Byte): Boolean;
  69. begin
  70.    if (Node <> nil) and ((Node.Key = Key) or
  71.      (Exists(Node.Right, Key)) or (Exists(Node.Left, Key))) then
  72.       Exists := True
  73.    else
  74.       Exists := False;
  75. end;
  76.  
  77. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement