jeudi 23 avril 2015

Collections Iterator und generischer Baum

Guten Abend,

ich habe hier eine Klasse TernaerTree<E> geschrieben auf der ein Iterator laufen soll.
Der Baum ist im Prinzip eine Erweiterung des Binärbaums auf 3 Kindknoten, die durch eine rekursive Baumdefinition selbst wieder vom Typ TernaerTree<E> sind.
Nun komme ich bei den Methoden hasNext() und next() von Iterator durcheinander und weiß nicht so recht wie ich diese implementieren soll.
Der Iterator soll zunächst den linken Teilbaum, dann den mittleren Teilbaum, dann den rechten Teilbaum und zuletzt die Wurzel durchlaufen.

So ist in etwa meine Klasse für den Baum bisher:
Java Code:

  1. public class TernaerTree<E> {
  2.  
  3. TernaerTree<E> root;
  4.  
  5. private TernaerTree<E> left;
  6. private TernaerTree<E> mid;
  7. private TernaerTree<E> right;
  8. private E value;
  9.  
  10. public E getValue() {
  11. return value;
  12. }
  13.  
  14. public TernaerTree<E> getTree(){
  15. return this;
  16. }
  17.  
  18. TernaerTree(TernaerTree<E> left,TernaerTree<E> mid, TernaerTree<E> right, E value) {
  19. this.left = left;
  20. this.mid = mid;
  21. this.right = right;
  22. this.value = value;
  23. }
  24.  
  25.  
  26.  
  27.  
  28. public Iterator<E> iterator() {
  29. return new WalkThroughIterator();
  30. }


Dies ist die noch etwas leere Klasse für den Iterator:

Java Code:

  1. class WalkThroughIterator implements Iterator<E> {
  2.  
  3. Iterator<E> baumIt = root.iterator();
  4.  
  5.  
  6. @Override
  7. public boolean hasNext() {
  8.  
  9.  
  10. if (root != null) {
  11. return true;
  12. }
  13. else {
  14. return false;
  15. }
  16.  
  17. }
  18.  
  19.  
  20. @Override
  21. public E next() {
  22. //TODO
  23. return root.getValue();
  24. }
  25.  
  26.  
  27. @Override
  28. public void remove() {
  29.  
  30. }
  31.  
  32. }


Wie man sieht habe ich für next() noch überhaupt keine Idee. Ich weiß, dass ich irgendwie rekutsiv mit den Teilbäumen arbeiten muss, aber nicht wie ich das anstellen soll.
Es wäre nett, wenn mir jemand helfen könnte, ohne fertigen Code zu liefern. Ich möchte nur wissen wie ich den Iterator implementieren muss. Das möchte ich jedoch alleine versuchen.

Danke für eure Hilfe.


Collections Iterator und generischer Baum

0 commentaires:

Enregistrer un commentaire