Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit uAlgo;
- interface
- type
- PNode = ^TNode;
- TNode = record
- Left: PNode;
- Right: PNode;
- Key: Byte;
- end;
- function Add(Node: PNode; Key: Byte): PNode;
- function Remove(Node: PNode; Key: Byte): PNode;
- external 'RemoveAlgo.dll' name 'Remove';
- function MaxDepth(Node: PNode): Byte;
- function Exists(Node: PNode; Key: Byte): Boolean;
- procedure DeleteAll(var Node: PNode);
- implementation
- procedure DeleteAll(var Node: PNode);
- begin
- if Node <> nil then
- begin
- DeleteAll(Node.Left);
- DeleteAll(Node.Right);
- Dispose(Node);
- end;
- end;
- function MaxDepth(Node: PNode): Byte;
- var
- LeftDepth, RightDepth: Byte;
- begin
- if Node = nil then
- MaxDepth := 0
- else
- begin
- LeftDepth := MaxDepth(Node.Left);
- RightDepth := MaxDepth(Node.Right);
- if LeftDepth > RightDepth then
- MaxDepth := LeftDepth + 1
- else
- MaxDepth := RightDepth + 1;
- end;
- end;
- function Add(Node: PNode; Key: Byte): PNode;
- begin
- if Node = nil then
- begin
- New(Node);
- Node.Left := nil;
- Node.Right := nil;
- Node.Key := Key;
- Add := Node;
- end
- else
- if Key > Node.Key then
- Node.Right := Add(Node.Right, Key)
- else
- if Key < Node.Key then
- Node.Left := Add(Node.Left, Key);
- Add := Node;
- end;
- function Exists(Node: PNode; Key: Byte): Boolean;
- begin
- if (Node <> nil) and ((Node.Key = Key) or
- (Exists(Node.Right, Key)) or (Exists(Node.Left, Key))) then
- Exists := True
- else
- Exists := False;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement