martes, 29 de enero de 2013

EJEMPLO DE ARBOL EN JAVA 1

CLASE NODO
 
public class Nodo {

    private Nodo pd;
    private Object dato;
    private Nodo pi;

    public Nodo(Object dato){
        this.dato=dato;
        pd=null;
        pi=null;
    }

public Object getDato() {return dato;}

public void setDato(Object dato) {this.dato = dato;}

public Nodo getPd() {return pd;}

public void setPd(Nodo pd) {this.pd = pd;}

public Nodo getPi() {return pi;}

public void setPi(Nodo pi) {this.pi = pi;}

}

CLASE ARBOL

public class Arbol {

     private Nodo Raiz;

     public Arbol(){ Raiz=null;}

     // insertar(Raiz, Raiz, x)


      public boolean arbolVacio(){return Raiz == null;}


      public void insertar(Nodo ant, Nodo p, Nodo x){

         if (p != null){
             if (Integer.parseInt(x.getDato().toString()) >                 Integer.parseInt(p.getDato().toString())) {
                   insertar(p, p.getPd(), x);
                }else{
                   insertar(p, p.getPi(), x);
                }
            }else{
               if (arbolVacio()){
                     Raiz = x;
               }else{
                  if (Integer.parseInt(x.getDato().toString()) >  Integer.parseInt(ant.getDato().toString())) {
                    ant.setPd(x);
                  }else {
                     ant.setPi(x);
                  }
               }
            }
}

public void imprimir(Nodo p){

if(p != null){
       imprimir(p.getPi());
       System.out.print(p.getDato()+"; ");
       imprimir(p.getPd());
}
}

public Nodo getRaiz() {
   return Raiz;
}
public void setRaiz(Nodo raiz) {
    Raiz = raiz;
}


public void eliminar(Nodo ant, Nodo p){
   if(esNodoHoja(p)){
         eliminarNodoHoja(ant, p);
   }else{
        if (esNodoCon2SubArboles(p)){
              eliminarNodoCon2SubArboles(ant, p);
        }else{
           eliminarNodoCon1SubArnol(ant, p);
        }
    }
}

public void eliminarNodoHoja(Nodo ant, Nodo p){
if (Raiz != p){
   if(ant.getPd() == p){
          ant.setPd(null);
   }else{
         ant.setPi(null);
   }
}else{
   Raiz = null;
}
}



public void eliminarNodoCon1SubArnol(Nodo ant, Nodo p){
if (Raiz == p){
     if(p.getPd() != null){
         Raiz = Raiz.getPd();
     }else{
         Raiz = Raiz.getPi();
     }
}else{
     if ( ant.getPd() == p){
           if(p.getPd() != null){
                ant.setPd(p.getPd());
           }else{
               ant.setPd(p.getPi());
           }
    }else{
        if(p.getPd() != null){
            ant.setPi(p.getPd());
        }else{
           ant.setPi(p.getPi());
    }
}
}
}


public boolean esNodoHoja(Nodo p){return (p.getPi() == null && p.getPd() == null);}

public boolean esNodoCon2SubArboles(Nodo p){return (p.getPi() != null && p.getPd() != null);}

CLASE ARBOL APLICACION

mport java.io.*;


import java.io.InputStreamReader;

public class ArbolAplicacion {

       Arbol miArbol;
       BufferedReader entrada;


      public ArbolAplicacion(){
             miArbol = new Arbol();
             entrada = new BufferedReader(new InputStreamReader(System.in));
       }


       public void generar()throws Exception{
           // Nodo p = miArbol.getRaiz();
           char op='s';
           while(op !='n' && op!='N'){

           System.out.println(" Ingrese elemento");

           Object elem = entrada.readLine();
           Nodo x = new Nodo(elem);

           miArbol.insertar(miArbol.getRaiz(), miArbol.getRaiz(), x);

           System.out.println(" Continuar enter/ n");
           String opcion=entrada.readLine();
           opcion=opcion.equals("")?"a":opcion;
            op = opcion.charAt(0);

        }
     }

       public void eliminarNodo()throws Exception{
            // Nodo p = miArbol.getRaiz();
            char op='s';
            while(op !='n' && op!='N'){

            System.out.println(" Ingrese elemento");

            Object elem = entrada.readLine();
            Nodo x=new Nodo(elem);
            // Buscar
           buscarEnElArbol(miArbol.getRaiz(), miArbol.getRaiz(), x);



           System.out.println(" Continuar enter/ n");
           String opcion=entrada.readLine();
           opcion=opcion.equals("")?"a":opcion;
            op = opcion.charAt(0);

          }
        }

public void buscarEnElArbol(Nodo ant, Nodo p, Nodo x){
   if(p!=null){
if(Integer.parseInt(x.getDato().toString())==Integer.parseInt(p.getDato().toString())){
miArbol.eliminar(ant, p);
}else{
if(Integer.parseInt(x.getDato().toString())>Integer.parseInt(p.getDato().toString())){
buscarEnElArbol(p,p.getPd(),x);
}else{
buscarEnElArbol(p,p.getPi(),x);
}
}
}

}

public void imprimirArbol(){
System.out.println("=====================");
System.out.println("Elementos del arbol");
miArbol.imprimir(miArbol.getRaiz()) ;
System.out.println("");
System.out.println("=====================");}

public void mostrarOpciones(){
System.out.println("=================");
System.out.println(" Opciones de Arbol");
System.out.println("1- Generar");
System.out.println("2- Eliminar");
System.out.println("3- Imprimir");
System.out.println("Ingrese su opciones:"); }

public void menu()throws Exception{
int op = 9;
do{
switch (op) {

case 1: generar(); break;
case 2: eliminarNodo(); break;
case 3: imprimirArbol(); break;}
mostrarOpciones();
String opc = entrada.readLine();
opc = opc.equals("")?"9":opc;
op=Integer.parseInt(opc);
}while(op!=0);
}

public static void main(String[] args)throws Exception {
ArbolAplicacion mi=new ArbolAplicacion();
mi.menu();
}
}



CLASE PRINCIPAL

public class Principal {


public static void main(String[] args) throws Exception {

ArbolAplicacion miA=new ArbolAplicacion();
miA.menu();

}}

3 comentarios:

  1. Q tal amigo. disculpe el metodo eliminarNodoCon2SubArboles(ant, p);
    podria ayudarme...

    ResponderEliminar
    Respuestas
    1. public class Arbol {

      private Nodo Raiz;

      public Arbol(){ Raiz=null;}

      // insertar(Raiz, Raiz, x)


      public boolean arbolVacio(){return Raiz == null;}


      public void insertar(Nodo ant, Nodo p, Nodo x){

      if (p != null){
      if (Integer.parseInt(x.getDato().toString()) > Integer.parseInt(p.getDato().toString())) {
      insertar(p, p.getPd(), x);
      }else{
      insertar(p, p.getPi(), x);
      }
      }else{
      if (arbolVacio()){
      Raiz = x;
      }else{
      if (Integer.parseInt(x.getDato().toString()) > Integer.parseInt(ant.getDato().toString())) {
      ant.setPd(x);
      }else {
      ant.setPi(x);
      }
      }
      }
      }

      public void imprimir(Nodo p){

      if(p != null){
      imprimir(p.getPi());
      System.out.print(p.getDato()+"; ");
      imprimir(p.getPd());
      }
      }

      public Nodo getRaiz() {
      return Raiz;
      }
      public void setRaiz(Nodo raiz) {
      Raiz = raiz;
      }


      public void eliminar(Nodo ant, Nodo p){
      if(esNodoHoja(p)){
      eliminarNodoHoja(ant, p);
      }else{
      if (esNodoCon2SubArboles(p)){
      eliminarNodoCon1SubArnol(ant, p);

      }else{
      eliminarNodoCon1SubArnol(ant, p);
      }
      }
      }

      public void eliminarNodoHoja(Nodo ant, Nodo p){
      if (Raiz != p){
      if(ant.getPd() == p){
      ant.setPd(null);
      }else{
      ant.setPi(null);
      }
      }else{
      Raiz = null;
      }
      }



      public void eliminarNodoCon1SubArnol(Nodo ant, Nodo p){
      if (Raiz == p){
      if(p.getPd() != null){
      Raiz = Raiz.getPd();
      }else{
      Raiz = Raiz.getPi();
      }
      }else{
      if ( ant.getPd() == p){
      if(p.getPd() != null){
      ant.setPd(p.getPd());
      }else{
      ant.setPd(p.getPi());
      }
      }else{
      if(p.getPd() != null){
      ant.setPi(p.getPd());
      }else{
      ant.setPi(p.getPi());
      }
      }
      }
      }


      public boolean esNodoHoja(Nodo p){return (p.getPi() == null && p.getPd() == null);}

      public boolean esNodoCon2SubArboles(Nodo p){return (p.getPi() != null && p.getPd() != null);}

      }

      Eliminar
  2. disculpe alguien me puede desir el codigo de inorder

    ResponderEliminar