import java.util.*;
import coda.*;

public class VisitaAlberi {
  
  public static void preordine(Albero a) {
    System.out.print(a.radice());
    Albero p = a.primo();
    if (p != null) {
      preordine(p);
      List resto = a.resto();
      Iterator it = resto.iterator();
      while (it.hasNext()) {
        Albero f = (Albero)it.next();
        preordine(f);  
      }
    }
  }

  public static void postordine(Albero a) {
    Albero p = a.primo();
    if (p != null) {
      postordine(p);
      List resto = a.resto();
      Iterator it = resto.iterator();
      while (it.hasNext()) {
        Albero f = (Albero)it.next();
        postordine(f);  
      }
    }
    System.out.print(a.radice());
  }

  public static void livelli(Albero a) {
    Coda queue = new Coda();
    queue.inCoda(a);
    
    while (!queue.estVuota()) {
      Albero aa = (Albero)queue.primo();
      queue.outCoda();
      System.out.print(aa.radice() + " "); //opera su nodo corrente

      Albero p = aa.primo(); // richiedi visita dei figli
      if (p != null) {
        queue.inCoda(p);
        List resto = aa.resto();
        Iterator it = resto.iterator();
        while (it.hasNext()) {
          Albero f = (Albero)it.next();
          queue.inCoda(f);  
        }
      }
    }
  }

}
  
