Eine Möglichkeit (garantiert ohne MemLeaks) wäre
*snip*
Aber das ist ja auch suboptimal. Da wird ja für jeden Knoten eine neue Stringlist erstellt, und dann steigen die Add-Aufrufe mit der Knotenanzahl stark (quadratisch?) an...
Besser wäre es
imho, die StringListe als Parameter zu übergeben. Der Aufrufer muss da vorher ein gültiges Objekt hineinstecken und hat konsequenterweise danach die Aufgabe, dasselbe aufzuräumen.
In etwa so:
Delphi-Quellcode:
function TBaum.Traversiere( aElement: TElement, const InhaltsListe: TStringList) : TStringList;
begin
if Assigned(aElement) then
begin
Traversiere(aElement.gibSohn(ToLinks), InhaltsListe));
if aElement <> Wurzel then // Warum eigentlich das hier??
InhaltsListe.Add(aElement.gibInhalt);
Traversiere(aElement.gibSohn(ToRechts), InhaltsListe);
end;
Result := InhaltsListe
end;