Witam piszę program w którym muszę zapisać słowa pobrane z pliku txt w drzewie BST. Napisałem już funkcję dodawania słowa do drzewa lecz mam z nią mały problem ;p oto kod
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
Drzewo = class
Wartosc: string;
PLisc: Drzewo;
LLisc: Drzewo;
end;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure Dodaj(wartosc:string; drzewo:Drzewo);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
drzewo1: Drzewo;
implementation
procedure TForm1.Dodaj(wartosc:string; drzewo:Drzewo);
begin
if drzewo.Wartosc = '' then
begin
drzewo.Wartosc:=wartosc;
ShowMessage('dodalem');
end
else if wartosc > drzewo.Wartosc then
begin
if drzewo.PLisc = NIL then
begin
drzewo.PLisc:= Drzewo.Create;
drzewo.PLisc.Wartosc:=wartosc;
ShowMessage('dodalem do prawego');
end
else
begin
Dodaj(wartosc, drzewo.PLisc);
ShowMessage('dodaje do prawego');
end;
end
else if wartosc <= drzewo.Wartosc then
begin
if drzewo.LLisc = NIL then
begin
drzewo.LLisc:= Drzewo.Create;
drzewo.LLisc.Wartosc:=wartosc;
ShowMessage('dodalem do lewego');
end
else
Dodaj(wartosc, drzewo.LLisc);
end;
end;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
drzewo1:= Drzewo.Create;
Dodaj('abc', drzewo1);
Dodaj('bbc', drzewo1);
ShowMessage(drzewo1.PLisc.PLisc.Wartosc);
end;
end.
problem polega na tym, że po takich wywołaniach Dodaj('abc', drzewo1);
Dodaj('bbc', drzewo1); w korzeniu mamy 'bbc', w prawym poddrzewie tez 'bbc' i w każdym jego prawym poddrzewie... więc robiąc takie wywołanie ShowMessage(drzewo1.PLisc.PLisc.Wartosc); otrzymamy 'bbc' a powinna być wartość nil ;p tzn tak mi się wydaje. Nie pisałem wcześniej w delphi więc mogłem zrobić tu jakiś głupi błąd. Dopiski ShowMessage('dodalem do prawego'); są tylko po to aby sprawwdzić gdzie funkcja się wykonuje. Z góry dzieki za pomoc.