martes, 2 de diciembre de 2014

clase ARBOL en JAVA codigo fuente



"La imaginación es más importante que el conocimiento. El conocimiento es ilimitado, mientras que la imaginación no"     -- Albert Einstein










hola como estan amigos en esta ocacion les comparto un proyecto que desarrolle y es la clase arbol que vi en la materia de ESTRUCTURAS DE DATOS en los comentarios del proyecto te daras cuenta de algunas especificaciones.

espero y te ayude y cualquier duda no olvides en comentar.....

AQUI el link de descarga        NO OLVIDES DARLE LIKE 


package po1_arbol;
public class PO1_ARBOL {  //se crea la clase

    public static void main(String[] args) {
       // se instancia para   poder añadir
        ArbolBinarioOrdenado_2 abo = new ArbolBinarioOrdenado_2();
        abo.insertar (100); // datos insertados
        abo.insertar (50);
        abo.insertar (25);
        abo.insertar (75);
        abo.insertar (150);

        System.out.println ("Impresion entreorden: ");// imprime el pre-orden
        abo.imprimirEntre ();
//te dice la cantidad de nodos del árbol
        System.out.println ("Cantidad de nodos del árbol:"+abo.cantidad());
// cuenta las hojas      
        System.out.println ("Cantidad de nodos hoja:"+abo.cantidadNodosHoja()); 
        System.out.println ("Impresion en entre orden junto al nivel del nodo.");
        abo.imprimirEntreConNivel();// saca el nivel
        System.out.print ("Artura del arbol:");// desarrolla la altura
        System.out.println(abo.retornarAltura()); // retorna la altura      
        abo.mayorValorl();
        abo.borrarMenor();
        System.out.println("Luego de borrar el menor:");
        abo.imprimirEntre ();
       
       
    }
}
Subclase
package po1_arbol;
public class ArbolBinarioOrdenado_2 {// subclase árbol
  class Nodo// se desarrolla un nodo
    {
        int info;
        Nodo izq, der;
    }
    Nodo raiz;// se declaran las respectivas variables
    int cant;
    int altura;
    public ArbolBinarioOrdenado_2() {// este método sirve para ordenarlo
   raiz=null;
    }
           
  public void insertar (int info) {// este metodo lo inserta
        if (!existe(info)) {
            Nodo nuevo;
            nuevo = new Nodo ();
            nuevo.info = info;
            nuevo.izq = null;
              nuevo.der = null;
            if (raiz == null)
                raiz = nuevo;
            else {
                Nodo anterior = null, reco;
                reco = raiz;
                while (reco != null)  {
                    anterior = reco;
                    if (info < reco.info)
                        reco = reco.izq;
                    else
                        reco = reco.der;
                }
                if (info < anterior.info)
                    anterior.izq = nuevo;
                else
                    anterior.der = nuevo;
            }
        }   
    }

    public boolean existe(int info) {// aquí te dice si existe o no algún elemento
        Nodo reco=raiz;
        while (reco!=null) {
            if (info==reco.info)
                return true;
            else
                if (info>reco.info)
                    reco=reco.der;
                else
                    reco=reco.izq;
        }
        return false;
    }

    private void imprimirEntre (Nodo reco)  {// imprime los nodos
        if (reco != null)  {   
            imprimirEntre (reco.izq);
            System.out.print(reco.info + " ");
            imprimirEntre (reco.der);
        }
    }

    public void imprimirEntre () {
        imprimirEntre (raiz);
        System.out.println();
    }

   
    private void cantidad(Nodo reco) {// te dice la cantidad de nodos que hay
        if (reco!=null) {
            cant++;
            cantidad(reco.izq);
            cantidad(reco.der);
        }
    }
   
    public int cantidad() {
        cant=0;
        cantidad(raiz);
        return cant;
    }

    private void cantidadNodosHoja(Nodo reco) {// método para retornar los nodos de las hojas
        if (reco!=null) {
            if (reco.izq==null && reco.der==null)
                cant++;
            cantidadNodosHoja(reco.izq);
            cantidadNodosHoja(reco.der);
        }
    }
   
    public int cantidadNodosHoja() {// te dice la cantidad de las hojas
        cant=0;
        cantidadNodosHoja(raiz);
        return cant;
    }

    private void imprimirEntreConNivel (Nodo reco,int nivel)  {// método para imprimir el nivel
        if (reco != null) {   
            imprimirEntreConNivel (reco.izq,nivel+1);
            System.out.print(reco.info + " ("+nivel+") - ");
            imprimirEntreConNivel (reco.der,nivel+1);
        }
    }

    public void imprimirEntreConNivel () {
        imprimirEntreConNivel (raiz,1);
        System.out.println();
    }
   
    private void retornarAltura (Nodo reco,int nivel)    {// método para retornar la altura
        if (reco != null) {   
            retornarAltura (reco.izq,nivel+1);
            if (nivel>altura)
                altura=nivel;
            retornarAltura (reco.der,nivel+1);
        }
    }

    public  int retornarAltura () {// retorna la altura
        altura=0;
        retornarAltura (raiz,1);
        return altura;
    }
   
    public void mayorValorl() {// te dice cual es el mayor
        if (raiz!=null) {
            Nodo reco=raiz;
            while (reco.der!=null)
                reco=reco.der;
            System.out.println("Mayor valor del árbol:"+reco.info);
        }
    }
   
    public void borrarMenor() {// borra el dato menor
        if (raiz!=null) {
            if (raiz.izq==null)
                raiz=raiz.der;
            else {
                Nodo atras=raiz;
                Nodo reco=raiz.izq;
                while (reco.izq!=null) {
                    atras=reco;
                    reco=reco.izq;
                }
                atras.izq=reco.der;
            }                 
        }
    }

}

No hay comentarios:

Publicar un comentario