Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Binaerbaum-/Pointerproblem


blafu - Di 03.01.06 18:57
Titel: Binaerbaum-/Pointerproblem
Hallo,

ich wuerde gerne ein (recht) simples Programm schreiben, das mir numerische Werte aus einem Edit einliest und sie dann beim Klicken des zugehoerigen Button an einen binaeren Suchbaum anhaengt. Die Werte des Baumes sollten dann in den drei Formen WLR, LWR, LRW ausgeben. Fuer das Ausgeben habe ich gar keine praktische Umsetzungsidee und fuer das Anhaengen weiss ich leider nur, wie es theoretisch funktioniert.


Es wuerde mich sehr freuen, wenn mir jemand weiterhelfen koennte - danke.


blafu - Di 03.01.06 19:56

Fuer die Ausgabe habe ich jetzt auch eine Idee.

Jetzt waere nur das Problem, wie ich einen Pointer an eine procedure uebergebe


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure WertHinzufuegen(Zeiger : KnotenPointer);
begin
  if (Zeiger = NILthen begin
    New(Zeiger);
    Zeiger^.Daten := Zahl;
    Zeiger^.Links := NIL;
    Zeiger^.Rechts := NIL
  end else if Zeiger^.Daten >= Zahl then
    Zeiger^.Links := WertHinzufuegen(Zeiger^.Rechts)
  else if Zeiger^.Daten <= Zahl then
    Zeiger^.Rechts := WertHinzufuegen(Zeiger^.Rechts)
end;


Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt


DaRkFiRe - Di 03.01.06 21:05

Also quasi inorder, postorder und preorder

Such da mal bei google - da findest Du sicherlich etwas Pseudocode, da es doch schon sehr elementar ist. Damit solltest Du Dein Problem dann umsetzen können...


MfG


blafu - Di 03.01.06 21:34

user profile iconDaRkFiRe hat folgendes geschrieben:
Also quasi inorder, postorder und preorder

Such da mal bei google - da findest Du sicherlich etwas Pseudocode, da es doch schon sehr elementar ist. Damit solltest Du Dein Problem dann umsetzen können...


MfG


Ja, genau. Das Problem habe ich inzwischen aber auch geloest.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure LWROut(Zeiger : KnotenPointer);
begin
  LWROut(Zeiger^.Links);
  Memo1.Lines.Add(IntToStr(Zeiger^.Daten));
  LWROut(Zeiger^.Rechts);
end;

procedure WLROut(Zeiger : KnotenPointer);
begin
  Memo1.Lines.Add(IntToStr(Zeiger^.Daten));
  LWROut(Zeiger^.Links);
  LWROut(Zeiger^.Rechts);
end;

procedure LRWOut(Zeiger : KnotenPointer);
begin
  LWROut(Zeiger^.Links);
  LWROut(Zeiger^.Rechts);
  Memo1.Lines.Add(IntToStr(Zeiger^.Daten));
end;


Nur funktioniert das alles noch nicht, da Delphi die Pointer nicht uebernehmen will.

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt