Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Rekursive Struktur iterativ abfragen

  Alt 22. Mär 2010, 12:23
Du erstellst einen sogenannten Iterator. Das ist ein Objekt, das zu einem Zeitpunkt immer genau
1. ... ein Element der rekursiven Struktur definiert
2. ... weiss, wo's als nächsts langgeht.

Zählen würde ich nicht, sondern eher mit einem 'First/Next/EndOfData()' Schema arbeiten.

Im Prinzip ist ein Iterator eine Liste von Ebenenpositionen: Pro Ebene ein Element und jedes Element hat die Aussage: "In dieser Ebene (des Baumes) bin ich gerade an dieser Position".
Eine Position ist definiert durch den Knoten sowie den aktuell besuchten Subknoten. Die unterste Position in dieser Liste zeigt naturgemäß auf ein Blatt.
Zunächst verweisen alle Positionen auf den ersten Unterknoten, das letzte Element somit auf das Blatt ganz links (First). Ein Aufruf von 'Next' geht nun zum nächsten Blatt, bis keins mehr da ist. Dann geht's eine Ebene nach oben, dort zum nächsten Unterknoten und dieser liefert wieder das erste Blatt. usw.

Irgendwann ist der Iterator überall an der letzten Position und kann einfach nicht weiter, dann liefern 'EndOfData' den Wert True.

Somit kann man so eine Struktur einfach so durchlaufen:

Code:
TreeIterator treeIterator = new TreeIterator(MyTree);

treeIterator.First();
while (!treeIterator.EndOfData) { 
  DoSomethingWith (treeIterator.CurrentItem());
  treeIterator.Next();
  }
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat