/*****************************  AVLBaumTest.java  *****************************/

import AlgoTools.IO;

/** Klasse zum Testen des AVLBaums: Einfuegen und Loeschen von Character      */

public class AVLBaumTest {

  public static void main(String[] argv) {

    AVLBaum b = new AVLBaum();
    char k = IO.readChar("Char in AVL-Baum einfuegen (Loeschen: \\n): ");
    while (k != '\n') {
      if (b.insert(new Character(k))) IO.println(k + " eingefuegt");
      else                                 IO.println(k + " nicht eingefuegt");
      IO.println("AVL-Baum mit Balancen:");
      printAVLBaum(b, 0);
      k = IO.readChar("Char in AVL-Baum einfuegen (Loeschen: \\n): ");
    }
    IO.println();
    k = IO.readChar("Char im AVL-Baum loeschen (Abbruch: \\n): ");

    while (k != '\n') {
      if (b.delete(new Character(k))) IO.println(k + " geloescht");
      else                           IO.println(k + " nicht geloescht");
      IO.println("AVL-Baum mit Balancen:");
      printAVLBaum(b, 0);
      k = IO.readChar("Char im AVL-Baum loeschen (Abbruch: \\n): ");
    }
    
  }

  /** Der AVL-Baum wird liegend mit Werten und Balancen ausgegeben.  */
  public static void printAVLBaum(Baum b, int tiefe) {
    if (! b.empty()) {                     // Wenn Baum nicht leer:
      printAVLBaum(b.right(), tiefe+1);    // rechten Teilbaum ausgeben
      for (int i=0; i<tiefe; i++)          // entsprechend der Rekursions-
        IO.print("    ");                  // tiefe einruecken
      IO.println((AVLBaum)b);              // Wurzel und Balance ausgeben
      printAVLBaum(b.left(), tiefe+1);     // linken Teilbaum ausgeben
    }
  }
}
