Muss es unbedingt n Iterator sein? Reichts vielleicht auch, einfach nur ne rekursive Funktion zu benutzen:
Delphi-Quellcode:
//Pseudocode:
TNode = class
private
...
FChildren: TNodeList; // Typed TObjectList
public
...
property Chrildren: TNodeList read ... write ...;
end;
TBaum = class
private
...
FRoot: TNode;
public
...
procedure HandleAllNodes(AProc: <CallBackFunction>);
...
property Root read FRoot write FRoot;
end;
procedure TBaum.HandleAllNodes(...);
begin
// rekursiv alle Nodes durchgehen und die CallBackFunction aufrufen
end;
Wenn du unbedingt n Iterator haben willst, kannst du das so auch machen:
Delphi-Quellcode:
TIterator = class
private
...
FCurrentNode: Integer; // Nummer des Knotens, der zuletzt ermittelt wurde
FCounter: Integer; // Counter für Next;
public
...
procedure Reset;
function Next: TNode;
end;
function TIterator.Next: TNode;
begin
// solange FCounter <= TCurrentNode
// rekursiv durchsuchen
// wenn FCounter = TCurrentNode
// Suche abbrechen und Node zurückliefern
end;
Is vielleicht nicht die Beste Lösung, aber ne einfache... Oder hab ich was vergessen/falsch verstanden?
mfg
Christian