Wie gesagt: Das geht in jeder Sprache mit Iteratoren/Generatoren bedeutend einfacher. Zum Beispiel mit meinen vier Zeilen von oben.
Und selbst in Delphi: Wäre es nicht einfacher, den Baum in eine Liste umzuformen (Preorder Traversal), bei der man dann einen Index in/dekrementiert? Verbraucht mehr Speicher als ein Iterator, aber zumindest bei Matzes Beispiel dürfte das keine Rolle spielen

.