143 lines
3.1 KiB
ObjectPascal
143 lines
3.1 KiB
ObjectPascal
unit TreeExampleMain;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
|
|
Dialogs, StdCtrls, JclBase;
|
|
|
|
type
|
|
TMainForm = class(TForm)
|
|
btnIntfArrayTree: TButton;
|
|
memoResult: TMemo;
|
|
btnArrayTree: TButton;
|
|
btnStrBinaryTree: TButton;
|
|
procedure btnIntfArrayTreeClick(Sender: TObject);
|
|
procedure btnArrayTreeClick(Sender: TObject);
|
|
procedure btnStrBinaryTreeClick(Sender: TObject);
|
|
public
|
|
end;
|
|
|
|
IIntfInteger = interface
|
|
['{0E32C3C9-5940-4373-B3BA-644473E3F3C2}']
|
|
function GetValue: Integer;
|
|
procedure SetValue(AValue: Integer);
|
|
property Value: Integer read GetValue write SetValue;
|
|
end;
|
|
|
|
TIntfInteger = class(TInterfacedObject, IIntfInteger)
|
|
private
|
|
FValue: Integer;
|
|
function GetValue: Integer;
|
|
procedure SetValue(AValue: Integer);
|
|
public
|
|
constructor Create(AValue: Integer);
|
|
end;
|
|
|
|
var
|
|
MainForm: TMainForm;
|
|
|
|
implementation
|
|
|
|
{$R *.dfm}
|
|
|
|
uses
|
|
JclContainerIntf, JclAlgorithms, JclBinaryTrees;
|
|
|
|
{ TIntfInteger }
|
|
|
|
constructor TIntfInteger.Create(AValue: Integer);
|
|
begin
|
|
inherited Create;
|
|
FValue := AValue;
|
|
end;
|
|
|
|
function TIntfInteger.GetValue: Integer;
|
|
begin
|
|
Result := FValue;
|
|
end;
|
|
|
|
procedure TIntfInteger.SetValue(AValue: Integer);
|
|
begin
|
|
FValue := AValue;
|
|
end;
|
|
|
|
function IntfIntegerComparator(AIntf1, AIntf2: IInterface): Integer;
|
|
begin
|
|
Result := (AIntf1 as IIntfInteger).Value - (AIntf2 as IIntfInteger).Value;
|
|
end;
|
|
|
|
procedure TMainForm.btnIntfArrayTreeClick(Sender: TObject);
|
|
var
|
|
Tree: IJclIntfTree;
|
|
I: Integer;
|
|
Obj: IIntfInteger;
|
|
It: IJclIntfIterator;
|
|
begin
|
|
memoResult.Lines.Clear;
|
|
Tree := TJclIntfBinaryTree.Create(IntfIntegerComparator);
|
|
for I := 0 to 17 do
|
|
begin
|
|
Obj := TIntfInteger.Create(I);
|
|
Tree.Add(Obj);
|
|
end;
|
|
|
|
if Tree.Contains(TIntfInteger.Create(15)) then
|
|
memoResult.Lines.Add('contains 15');
|
|
|
|
Tree.TraverseOrder := toPostOrder;
|
|
It := Tree.Last;
|
|
while It.HasPrevious do
|
|
begin
|
|
Obj := It.Previous as IIntfInteger;
|
|
memoResult.Lines.Add(IntToStr(Obj.Value));
|
|
end;
|
|
|
|
It := Tree.First;
|
|
while It.HasNext do
|
|
It.Remove;
|
|
end;
|
|
|
|
procedure TMainForm.btnArrayTreeClick(Sender: TObject);
|
|
var
|
|
Tree: IJclTree;
|
|
I: Integer;
|
|
It: IJclIterator;
|
|
begin
|
|
memoResult.Lines.Clear;
|
|
Tree := TJclBinaryTree.Create(JclAlgorithms.IntegerCompare);
|
|
for I := 0 to 17 do
|
|
Tree.Add(TObject(I));
|
|
|
|
if Tree.Contains(TObject(15)) then
|
|
memoResult.Lines.Add('contains 15');
|
|
|
|
Tree.TraverseOrder := toOrder;
|
|
It := Tree.First;
|
|
while It.HasNext do
|
|
memoResult.Lines.Add(IntToStr(Integer(It.Next)));
|
|
end;
|
|
|
|
procedure TMainForm.btnStrBinaryTreeClick(Sender: TObject);
|
|
var
|
|
Tree: IJclStrTree;
|
|
I: Integer;
|
|
It: IJclStrIterator;
|
|
begin
|
|
memoResult.Lines.Clear;
|
|
Tree := TJclStrBinaryTree.Create(JclAlgorithms.StrSimpleCompare);
|
|
for I := 0 to 17 do
|
|
Tree.Add(Format('%.2d', [I]));
|
|
|
|
if Tree.Contains('15') then
|
|
memoResult.Lines.Add('contains 15');
|
|
|
|
Tree.TraverseOrder := toOrder;
|
|
It := Tree.First;
|
|
while It.HasNext do
|
|
memoResult.Lines.Add(It.Next);
|
|
end;
|
|
|
|
end.
|
|
|