Witam serdecznie.
Mam problem, na zaliczenie mam stworzyń następujący program:

  1. wczytać z pliku dane;
  2. stworzyć drzewo BST;
  3. wypisać inorder i preorder to drzewo;

i mam problem :/

Całkiem dobrze mi szło, aż się zaciołem, i nie wiem w czym problem :/ Pomocy.
Poniżej kod:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    OpenDialog1: TOpenDialog;
    Button2: TButton;
    Button3: TButton;
    Memo2: TMemo;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);


  private
    { Private declarations }
  public

  end;

Type
  Tinfo = string[25];
  Link = ^ Node;
  Node = record
    Info : Tinfo;
    Left ,Right: Link;
    end;

var
  Form1: TForm1;
  s, p, prev: Link;
  plik : TextFile;
  tablica: Array[1..100] of String;
  i, j, k, l : integer;
  temp, x : string;
  root : Link;

implementation

{$R *.dfm}


procedure insert_r (var p: Link; x: Tinfo);

begin
  if p = NIL then
  begin
    new(p); //new node
    p^.info:= x;
    p^.left:= NIL;
    p^.right:= NIL;
  end
  else
  if x < p^.info then
    insert_r (p^.left, x)
  else
  insert_r (p^.right, x)
end;

procedure preorder (p : link);
begin

  if p <> NIL then
  begin
    Memo2.Lines.Add(p^.info+ ' ');    // tu się sypie, wyskakuje: Undeclared identifier: 'Memo2'
    preorder(p^.left);
    preorder(p^.right);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute
    then
      begin
        Memo1.Clear;
        AssignFile(plik,OpenDialog1.FileName);
        Reset(plik);


        for i:=0 to 99 do
          begin
            Readln(plik, temp);
            tablica[i]:=temp;

          end;
      end;

  for j:=0 to 99 do
      if tablica[j]<>'' then Memo1.Lines.Add(tablica[j]);

Button4.Enabled := True;

end;

procedure TForm1.Button4Click(Sender: TObject);
begin
for k:=0 to 99 do
  begin
  if tablica[k]<>'' then
    begin
      tablica[k]:=x;
      insert_r (root, x);
      Memo2.Lines.Add(x);
    end;
  end;

Memo1.Lines.Add('');
Memo1.Lines.Add('');
Memo1.Lines.Add('-----------------------------');
Memo1.Lines.Add('Utworzono drzewo BST');
Memo1.Lines.Add('-----------------------------');

Button2.Enabled := True;
Button3.Enabled := True;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Memo2.Clear;
  for l:=0 to 99 do
    if tablica[l]<>'' then preorder(tablica[l]);     // tu też wyskakuje blad, procedura chce zmienna link, a ja jej daje string, ale jak zmienic string na link? :/
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Memo2.Clear;
end;

end.