![]() |
Baum laden
Ein Baum wurde mit dem preorder-Algorithmus gespeichert. Nun soll der Baum geladen werden:
Ich habe den Code mal wörtlich dargestellt:
Code:
Zwar liefert dieser Algorithmus einen Baum, jedoch sind einige Sachen darin doppelt. Also entspricht der erzeugte Baum nicht dem gespeicherten Baum.
Form.load (v:Binärbaum)
var x : Textdatei; y : String; begin while not Dateiende(x) do begin LiesZeile(x, y); if y enthält Zeichen(*) then // Zeichen * markiert Blätter begin lösche Zeichen(*);//Zeichen wird gelöscht, es diente nur zum markieren load(v.gibRechtenBaum.erzuge(y)); load(v.giblinkenBaum.erzeuge(y)); end else v.erzeuge(y); end; end; Sieht jemand wo mein Fehler ist? Gruß |
AW: Baum laden
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:
Aber es geht bestimmt noch viel einfacher.
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); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz