Удалить из бинарного дерева все отрицательные числа

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
Pav163
Сообщения: 1
Зарегистрирован: 04 фев 2013, 22:08

04 фев 2013, 22:14

Вот задача. Никак не могу удалить все отрицательные элементы из дерева. Надеюсь на вашу помощь и ваш опыт. Спасибо
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;

type
PNode=^TNode;
TNode=record
nKey:Integer;
nCount:integer;
pLeft :p Node;
pRight :p Node;
end;

TTree=class
private
public
fTree :p Node;
procedure Search(x:integer;var node:PNode);
constructor Create;
end;

TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
TreeView1: TTreeView;
procedure Vyvod(node:PNode;item:TTreeNode);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
t:TTree;
implementation

{$R *.dfm}
constructor TTree.Create;
begin
fTree:=nil;
end;

procedure TTree.Search(x: Integer; var node: PNode);
begin
if node=nil then
begin
node:=new(PNode);
with node^ do begin
nKey:=x;
nCount:=1;
pLeft:=nil;
pRight:=nil;
end;
end
else
if x<node^.nKey then
Search(x,node^.pLeft)
else
if x>node^.nKey then
Search(x,node^.pRight)
else
inc(node^.nCount);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
znac, n: string;
i, zn, nm:integer;
begin
t:=TTree.Create;
n:=Inputbox('Vvod', 'Vvedite kol-vo chisel', '');
nm:=StrToInt(n);
for I := 0 to nm do
begin
try
znac:=inputbox('Vvod', 'Vvedite chislo', '');
zn:=StrToInt(znac);
except
ShowMessage('Error');
end;
t.Search(zn, t.fTree);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
item:TTreeNode;
begin
item:=nil;
Vyvod(t.fTree,item);
end;


procedure TForm1.Vyvod(node:PNode;item:TTreeNode);
var
tmpItem:TTreeNode;
begin
if node <> nil then begin
tmpItem:=TreeView1.Items.AddChild(item,inttostr(node^.nKey));
vyvod(node^.pLeft,tmpItem);
vyvod(node^.pRight,tmpItem);
end;
end;


end.
Ответить