Wie sieht denn die Datei aus?
Und so nebenbei:
Du liest 'y' ein. Wenn da ein '*' ist, dann erzeugst Du zwei Äste, denen Du 'y' übergibst (vermutlich der Inhalt). Das war's dann.
Alleine der Umstand, das eine rekursive Datenstruktur statisch so eingelesen wird (iterativ, ohne Stack) zeigt schon, das Du hier etwas falsch machst.
Das Laden funktioniert logischerweise genauso wie das speichern.
So würde das z.B. gehen:
Delphi-Quellcode:
Procedure TBaumKnoten.SpeichereIn (Datei : TextDatei); // TStream wäre besser
Begin
if Assigned (Self) then begin
Writeln(Knoteninhalt);
SpeichereIn (LinkerAst);
SpeichereIn (RechterAst);
else
Writeln('LEER');
End;
Class Function TBaumKnoten.ErzeugeBaumAusDatei(Datei : TextDatei) : TBaumKnoten; // TStream wäre besser
Var
s : String;
Begin
ReadLn(Datei, s);
if s='LEER' then
result := nil
else begin
result := TBaumKnoten.Create;
result.KnotenInhalt := s;
result.LinkerAst := ErzeugeBaumAusDatei(Datei);
result.RechterAst := ErzeugeBaumAusDatei(Datei);
end
end;
// Speichern:
MeinBaum.Wurzel.SpeichereIn(Datei);
...
// Laden
MeinBaum.Wurzel := TBaumKnoten.ErzeugeBaumAusDatei(Datei);
// Besser wäre so eine Methode, aber die bekomme ich mit einem Kaffee am Montagmorgen nicht hin
// MeinBaum.Wurzel.LadeAus(Datei);
Aber es geht bestimmt noch viel einfacher.