Also:
Delphi-Quellcode:
Foreach row in myTreeTable
writeln(LevelIndent (row)+' '+intToStr(row.ID));
...
Function LevelIndent (row : TableRow) : String;
Begin
if row.ParentID = 0 then
result := ''
else
result := ' '+Level (row.Table.FindRow(row.ParentID))
End;
Das ist jetzt die einfachste und langsamste Variante. Aber sobald Du 'row.Table.FindRow(ID : Integer)' programmiert hast, läuft es.
Die Idee ist, das man die rekursive Definition des Baumes auch in den Implementierungen abbilden muss. Das man daraus (weil eine Tailrecursion) sofort eine Iteration machen kann, steh auf einem anderen Blatt...
"Die Einrücktiefe eines Knotens ist um eins höher als die des Elternknotens".
Man kann das auch optimieren, indem man sich bereits ermittelte 'LevelIndent' merkt.
@mkinzler: Wenn man so eine Tabelle in ein TreeView bekommt, schafft man auch einen Ausdruck, denn die Lösungen sind ja äquivalent.