Ayuda ejercicio árbol binario en Java

Respuesta de
a
Usuario
Tengo que dar solución a un ejercicio de java, utilizando arboles (en este caso arboles binarios). Para mi es un poco complicado hacerlo visto que no entiendo bien. Aquí os dejo el enunciado y desde luego os agradezco por la ayuda =)
El recorrido en preorden de un determinado árbol binario es: GEAIBMCLDFKJH y en inorden IABEGLDCFMKHJ
- Dar el recorrido en postorden.
- Diseñar una función para dar el recorrido en postorden dado el recorrido en preorden e inorden y escribir un programa para comprobar el resultado del apartado anterior.
- Implementar una función no recursiva para recorrer un árbol binario en inorden.
- Implementar una función no recursiva para recorrer un árbol binario en postorden.
- Escribir una función recursiva que encuentre el número de nodos de un árbol binario.
Experto
Aquí tienes el código fuente.
Me lo he descargado y he mirado un poco y tiene buena pinta
http://mygnet.net/codigos/java/varios/arboles_binarios_de_busqueda.2513
Tienes que ir descomprimiendo varios archivos y buscar el que se llama Árbol.java
Si tienes dudas me las pregunta aquí mismo.
Usuario
Lo que necesitaba era algo sin interfaz gráfica por que todavía no he aprendido.
Muchas gracias por la ayuda =)
Experto
Pero si miras solo la clase Árbol.java y coges solo las funciones que te interesen no usas interficie gráfica.
¿Necesitas ayuda para sacarlas?
Usuario
Sí, si no te molesta claro =)
Desde luego gracias por todo =)
Experto
//Funciones

    class NodoArbol{
        NodoArbol li,ld;
        int dato;
       
        public NodoArbol(int d){
            dato=d;
            li=ld=null;
        }
       
        public synchronized void insertar(int d){
       
        if(d<dato){
            if(li==null){
                li=new NodoArbol(d);
            }
            else{
                li.insertar(d);
            }
        }
       
        if(d>dato){
            if(ld==null){
                ld=new NodoArbol(d);
            }
            else{
                ld.insertar(d);
            }
        }
       
    }//fin insertar
       
        public int retornadato(){
            return(dato);
        }//end retornadato
       
    }
   
    public class Arbol {
       
        private NodoArbol raiz;
   
    public Arbol() {
        raiz=null;
    }
    public NodoArbol retornaraiz(){
        return(raiz);
    }
   
   
    public synchronized void insertarNodo(int d){
          if(raiz==null){
              raiz=new NodoArbol(d);
              //primero=raiz;
          }
          else{
              raiz.insertar(d);
          }
      }//fin insertarNodo
   
    public synchronized String preorden(){
        String pre=ayudantepreorden(raiz);
        return(pre);
    }
   
    private String ayudantepreorden(NodoArbol nodo){
        String cadena=new String();
          if(nodo!=null){
            //return;
           
            //System.out.print(nodo.dato+" ");
            cadena=cadena+String.valueOf(nodo.dato+" ");
            cadena=cadena+ayudantepreorden(nodo.li);
            cadena=cadena+ayudantepreorden(nodo.ld);
            }
          else{
            cadena="";
          }
        return(cadena);
    }
   
    public synchronized String inorden(){
        String inor=ayudanteinorden(raiz);
        return(inor);
    }
   
    private String ayudanteinorden(NodoArbol nodo){
        String cadena=new String();
        if(nodo!=null){
           // return;
                       
            cadena=cadena+ayudanteinorden(nodo.li);
            cadena=cadena+nodo.dato+" ";
            cadena=cadena+ayudanteinorden(nodo.ld);
        }
        else{cadena="";}
        return(cadena);
    }
   
    public synchronized String posorden(){
        String pos=ayudanteposorden(raiz);
        return(pos);
    }
   
    private String ayudanteposorden(NodoArbol nodo){
        String cadena=new String();
        if(nodo!=null){
           
           
           
            cadena=cadena+ayudanteposorden(nodo.li);
            cadena=cadena+ayudanteposorden(nodo.ld);
            cadena=cadena+nodo.dato+" ";
        }
        else{cadena="";}
          return(cadena); 
    }
   
    public synchronized int altura(NodoArbol R){
        NodoArbol p=R;
        int altizq=p.li==null ? 1:1+altura(p.li);
        int altder=p.ld==null ? 1:1+altura(p.ld);
        return(Math.max(altizq,altder));
    }//end altura
   
    public synchronized int hojas(NodoArbol R){
        NodoArbol p=R;
     int hojas=0;
     if(p.li==null & p.ld==null){
         hojas=1;
     }
     else{
         if(p.li!=null){
             hojas=hojas+hojas(p.li);
         }
         if(p.ld!=null){
             hojas=hojas+hojas(p.ld);
         }
     }
     return(hojas);
    }//end hojas
   
    public synchronized String ancestros(NodoArbol R,int d){
        NodoArbol p=R;
       
        String h=new String();
               
        if (p.dato==d){
            return(String.valueOf(" --> "+d));           
        }//end if
       
        if (d>p.dato){
        h=h+" --> "+p.dato+ancestros(p.ld,d);           
        }
        else{
        h=h+" --> "+p.dato+ancestros(p.li,d);   
        }
        return(h);
    }
}

//Ejemplo
                //Crear arbol
                 Arbol arbol=new Arbol();
                 int valor=0;
                 nodos= new Integer(10);//Nodos
                 for (int i=1;i<=nodos;i++){
                   dato= new Intenger(i);//Nodo
                   arbol.insertarNodo(dato);
                 }
              
             //Preorden
                  System.ou.printl("Preorden : "+arbol.preorden());
             
             //Inorden
                  System.ou.printl("Inorden : "+arbol.inorden());
             //Postorden
                  System.ou.printl("Postorden : "+arbol.posorden());                 
Usuario
Muchas gracias por todo, ahora voy a probar que seguramente funcionará.
Una vez más gracias por todo!
Saludos cordiales,
Tiago Dezan