Ayuda ejercicio árbol binario en Java

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.
1

1 respuesta

1
Respuesta de
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.
Lo que necesitaba era algo sin interfaz gráfica por que todavía no he aprendido.
Muchas gracias por la ayuda =)
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?
Sí, si no te molesta claro =)
Desde luego gracias por todo =)
//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());
Muchas gracias por todo, ahora voy a probar que seguramente funcionará.
Una vez más gracias por todo!
Saludos cordiales,
Tiago Dezan
Añade un comentario a esta respuesta
Añade tu respuesta
Haz clic para o
Escribe tu mensaje

Más respuestas relacionadas

¿No es la pregunta que estabas buscando?
Puedes explorar otras preguntas del tema Java o hacer tu propia pregunta: