Advertisement
Guest User

Untitled

a guest
Aug 18th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.14 KB | None | 0 0
  1.  
  2. import java.util.Iterator;
  3. import java.util.NoSuchElementException;
  4. import java.util.Stack;
  5.  
  6. import sun.org.mozilla.javascript.internal.Node;
  7.  
  8. /**
  9.  * Iterator zum Durchlaufen von Binärbäumen nach der präfixen WLR Methode.
  10.  * @author csdixi
  11.  * @param <K>Primärschlüssel
  12.  * @param <D>Daten die an die einzelnen Primärschlüssel gebunden sind
  13.  */
  14. class WLR<K extends Comparable<K>, D> implements Iterator<Pair<K, D>> {
  15.  
  16.     protected Stack<Node<K, D>> stack = new Stack<Node<K, D>>();
  17.     protected Node<K, D> ergebnis;
  18.  
  19.     /**
  20.      * Konstruktor, der beim erstellen des Objekt die übergebene Wurzel in den
  21.      * Stack legt
  22.      *
  23.      * @param root ist die Wurzel des Baumes
  24.      */
  25.     public WLR(Node<K, D> root) {
  26.         stack.push(root);
  27.     }
  28.  
  29.     @Override
  30.     /**
  31.      * Methode die überprüft ob ein weiteres Element in Binärbaum vorhanden ist
  32.      */
  33.     public boolean hasNext() {
  34.  
  35.         if (ergebnis.left == null && stack.empty()) {
  36.             return false;
  37.         }
  38.         return true;
  39.     }
  40.    
  41.     @Override
  42.     /**
  43.      * Methode das nächste Element ausgibt
  44.      */
  45.     public Pair<K, D> next() throws NoSuchElementException {
  46.  
  47.         // Wurzel ist das nächste Element
  48.         if (ergebnis == null && !stack.empty()) {
  49.             ergebnis = stack.pop();
  50.         //Knoten hat linken und rechten Knoten 
  51.         } else if (ergebnis.left != null && ergebnis.right != null) {
  52.             stack.push(ergebnis.right);
  53.             ergebnis = ergebnis.left;
  54.         //Knoten hat linken aber keinen rechten Knoten 
  55.         } else if (ergebnis.left != null && ergebnis.right == null) {
  56.             ergebnis = ergebnis.left;
  57.         //Knoten hat keinen linken aber rechten Knoten 
  58.         } else if (ergebnis.left == null && ergebnis.right != null) {
  59.             ergebnis = ergebnis.right;
  60.         //Knoten hat keinen linken und keinen rechten Knoten   
  61.         } else if (ergebnis.left == null && ergebnis.right == null
  62.                 && !stack.empty()) {
  63.             ergebnis = stack.pop();
  64.         //Kein weiteres Element vorhanden  
  65.         } else {
  66.             throw new NoSuchElementException(
  67.                     "Fehler, es gibt kein weiteres linkes Element und der Stack ist leer!");
  68.         }
  69.  
  70.         return new Pair<K, D>(ergebnis.key, ergebnis.data);
  71.     }
  72.  
  73.     @Override
  74.     public void remove() {
  75.        
  76.         throw new UnsupportedOperationException();
  77.  
  78.     }
  79.  
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement