Vamos a ver:
-RECURSIVAMENTE:
Hay tres métodos Inorden, Preorden y Postorden, según el orden de recorrido de los nodos. 
Inorden:
 Primero procesamos el Hijo Izquierdo luego la raiz y finalmente el Hijo Derecho.
void inorden(arbol a)
{
  arbol de,iz;
  datosarbol x;
if (!a.vacio())
{
  iz=a.hijoizq();
  de=a.hijoder();
  x=a.raiz();
  inorden(iz);
  write(x)//proceso la raiz según el caso
  inorden(de);
}
}
Preorden:
Primero procesamos la raiz, luego  el Hijo Izquierdo y  finalmente el Hijo Derecho.
void preorden(arbol a)
{
  arbol de,iz;
  datosarbol x;
if (!a.vacio())
{
  iz=a.hijoizq();
  de=a.hijoder();
  x=a.raiz();
  write(x)//proceso la raiz según el caso
  inorden(iz);
  inorden(de);
}
}
Postorden:
Primero procesamos el Hijo Izquierdo luego el  Hijo Derecho y finalmente la raiz.
void postorden(arbol a)
{
  arbol de,iz;
  datosarbol x;
if (!a.vacio())
{
  iz=a.hijoizq();
  de=a.hijoder();
  x=a.raiz();
  inorden(iz);
  inorden(de);
  write(x)//proceso la raiz según el caso
}
}
NO RECURSIVO.
En cuanto al recorrido no recursivo se hace con la ayuda de una cola, se trata de un recorrido por niveles.
void recorrido(arbol a)
{
  cola c;
  arbol b;
  c.crearcola();
  c.inscola(a);//inserto el arbol en la cola
  while (!c.colavacia())
 {
   c.frentecola(b);
   iz=b.hijoizq();
   de=b.hijoder();
   x=b.raiz();
   write(x);//proceso raiz según caso
   c.inscola(iz);
   c.inscola(de);
}
}
Espero que te haya servido de ayuda...