Puoi fare riferimento alle slide del prof Pulvirenti.

codice:
protected void iterPreorder(){
           IntBTNodo p = root;
               Pila aiuto = new Pila();
                  if (p != null){
                   aiuto.push(p);
                     while (!aiuto.isEmpty()){
                      p = (IntBTNodo) aiuto.pop();
                      p.visit(); // da gestire !!
                      if (p.right != null) aiuto.push(p.right);
                      if (p.left != null) aiuto.push(p.left);
                       }
                    }
           }
Se non ho capito male, siccome nella preorder visiti la radice, poi il sottoalbero sinistro e poi il destro, allora nello stack prima metti la radice, e poi, visto come funziona lo stack, inserisci prima il destro e poi il sinistro, cosģ togliendoli fuori li visiterai come ti sercono.