Autor Tema: Código árbol binario en Java recorrido preorden inorden postorden insertar nodos  (Leído 672 veces)

Heroic

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Hola, mi problema es que creé un árbol binario en java, sin embargo los valores y su número de nodos ya están asignados. En lo que pido ayuda es que el código debe pedir el numero de nodos y sus valores, por ejemplo: Quiero un árbol con 5 nodos y sus valores son 1,65,3,9,0. O puede que quiera un árbol de 9 nodos y ya escribo sus valores espero haberme explicado bien, el código incluye los recorridos pero estos están bien.
Adjunto el código del árbol binario:

Código: [Seleccionar]
public class ArbolBinarioOrdenado {

    public ArbolBinarioOrdenado()
    {
        raiz = null;
    }
    int contadorNodos;
    //Creamos la clase Nodo
    class Nodo
    {
        int info;
        ArbolBinarioOrdenado.Nodo izq;
        ArbolBinarioOrdenado.Nodo der;
    }
   
    //Declaramos la propiedad raiz del arbol
    ArbolBinarioOrdenado.Nodo raiz;
   
   
    //Inicia metodo Insertar
     public void insertar(int info)
    {
        //Declaramos objeto nuevoArbol
        ArbolBinarioOrdenado.Nodo nuevoArbol = new ArbolBinarioOrdenado.Nodo();
       
        //Asigamos información
        nuevoArbol.info = info;
        nuevoArbol.izq = null;
        nuevoArbol.der = null;
       
        //Verificamos si es raiz
        if (raiz == null)
        {
            raiz = nuevoArbol;
        }
        else
        {
            //Inicializamos dos nuevos nodos
            ArbolBinarioOrdenado.Nodo anterior = null;
            ArbolBinarioOrdenado.Nodo actual = null;
           
            //Igualamos el nodo actual a la raiz
            actual = raiz;
            //Realizamos la logica de ir recorriendo el nodo actual y sus subarboles
            while (actual != null)
            {
                anterior = actual;
                if (info < actual.info)
                {
                    actual = actual.izq;
                }
                else
                {
                    actual = actual.der;
                }
            }
            //Si el nodo actual es nulo, agregamos información a sus lados
            if (info < anterior.info)
            {
                anterior.izq = nuevoArbol;       
            }
            else
            {
                anterior.der = nuevoArbol;
            }
        }
    }//Termina método Insertar
     
     private void imprimirPreOrden(ArbolBinarioOrdenado.Nodo recorriendo)
    {
        //Funcion recursiva Preorden
        //Recorrido Raiz Izq. Der.
        if (recorriendo != null)
        {
            System.out.print(recorriendo.info + " ");
            imprimirPreOrden(recorriendo.izq);
            imprimirPreOrden(recorriendo.der);
        }
    }
       
    private void imprimirInOrden(ArbolBinarioOrdenado.Nodo recorriendo)
    {
        //Funcion recursiva InOrden
        //Recorrido  Izq. Raiz Der.
        if (recorriendo != null)
        {
            imprimirInOrden(recorriendo.izq);
            System.out.print(recorriendo.info + " ");
            imprimirInOrden(recorriendo.der);
        }
    }
    private void imprimirPosOrden(ArbolBinarioOrdenado.Nodo recorriendo)
    {
        //Funcion recursiva PosOrden
        //Recorrido  Izq. Der. Raiz
        if (recorriendo != null)
        {
            imprimirPosOrden(recorriendo.izq);
            imprimirPosOrden(recorriendo.der);
            System.out.print(recorriendo.info + " ");
        }
    }
     
    public void llamarPreorden()
    {
        System.out.println("\nImpresion preorden: ");
        imprimirPreOrden(raiz);
        System.out.println();
    }
    public void llamarInorden()
    {
        System.out.println("\nImpresion inorden: ");
        imprimirInOrden(raiz);
        System.out.println();   
    }
   
    public void llamarPosorden()
    {
         System.out.println("\nImpresion postorden: ");
        imprimirPosOrden(raiz);
        System.out.println();   
    }
       
    public static void main(String[] args)
    {
        ArbolBinarioOrdenado abo  = new ArbolBinarioOrdenado();
       
       
        abo.insertar(56);
        abo.insertar(24);
        abo.insertar(76);
        abo.insertar(12);
        abo.insertar(27);
        abo.insertar(87);
        abo.insertar(45);
        abo.insertar(85);
        abo.insertar(90);
        abo.insertar(40);
        abo.insertar(54);
        abo.llamarPreorden();
        abo.llamarInorden();
        abo.llamarPosorden();       
    }   
}


     
« Última modificación: 13 de Enero 2022, 19:19 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2641
    • Ver Perfil
Buenas, para quien revise este hilo aquí dejo el código para generar un árbol binario de n nodos (número de nodos aletatorio entre 1 y 50 y valores de los nodos aleatorios entre 1 y 100).

Código: [Seleccionar]
//arbol en java inorden, posorden, preorden */

//definicion de la clase NodoArbol
class NodoArbol {

//miembros de acceso
NodoArbol nodoizquierdo;
int datos;
NodoArbol nododerecho;

//iniciar dato y hacer de este nodo un nodo hoja
public NodoArbol(int datosNodo)
{
datos = datosNodo;
nodoizquierdo = nododerecho = null; //el nodo no tiene hijos
}

//buscar punto de insercion  e insertar nodo nuevo
public synchronized void insertar(int valorInsertar)
{
//insertar en subarbol izquierdo
if (valorInsertar < datos){

//inserta nuevo nodoarbol
if (nodoizquierdo == null)
nodoizquierdo = new NodoArbol(valorInsertar);
else //continua recorriendo subarbol izquierdo
nodoizquierdo.insertar(valorInsertar);
}

//insertar nodo derecho
else if(valorInsertar > datos){

//insertar nuevo nodoarbol
if (nododerecho == null)
nododerecho = new NodoArbol(valorInsertar);
else //continua recorriendo subarbol derecho
nododerecho.insertar(valorInsertar);
}
} //fin del metodo insertar

} //fin clase nodoarbol

//---------- CLASE ARBOL------------------
 class Arbol{
private NodoArbol raiz;

//contruir un arbol vacio
public Arbol()
{
raiz = null;
}

//insertar un nuevo nodo en el arbol de busqueda binaria
public synchronized void insertarNodo(int valorInsertar)
{
if(raiz == null)
raiz = new NodoArbol(valorInsertar); //crea nodo raiz

else
raiz.insertar(valorInsertar); // llama al metodo insertar
}

//--------------- EMPESAR EL RECORRIDO EN PREORDEN-----------------------
public synchronized void recorridoPreorden()
{
ayudantePreorden(raiz);
}
//metodo recursivo para recorrido en preorden

private void ayudantePreorden(NodoArbol nodo)
{
if (nodo == null)
return;

System.out.print(nodo.datos + " "); // mostrar datos del nodo
ayudantePreorden(nodo.nodoizquierdo); //recorre subarbol izquierdo
ayudantePreorden(nodo.nododerecho); //recorre subarbol derecho
}

//--------------EMPEZAR RECORRIDO INORDEN-----------------------------------
public synchronized void recorridoInorden()
{
ayudanteInorden(raiz);
}

// metodo recursivo para recorrido inorden

private void ayudanteInorden(NodoArbol nodo)
{
if (nodo == null)
return;

ayudanteInorden(nodo.nodoizquierdo);
System.out.print(nodo.datos + " ");
ayudanteInorden(nodo.nododerecho);
}

//-----------------------------EMPEZAR RECORRIDO POSORDEN---------------------------------
public synchronized void recorridoPosorden()
{
ayudantePosorden(raiz);
}

//metodo recursivo para recorrido posorden

private void ayudantePosorden(NodoArbol nodo)
{
if (nodo == null)
return;

ayudantePosorden(nodo.nodoizquierdo);
ayudantePosorden(nodo.nododerecho);
System.out.print(nodo.datos + " ");
}

}//fin clase arbol

//programa para probar la clase arbol

public class EjemploArbol {
public static void main(String args[])
{
Arbol arbol = new Arbol();
int valor;
int numeroNodos;

numeroNodos = (int) (Math.random() * 50);
System.out.println( "Insertando los siguientes valores (" + numeroNodos+" nodos): ");

//insertando 10 numeros aleatorios del 0 al 99 en el arbol
for (int i = 1; i<=numeroNodos ; i++)
{
valor = (int) (Math.random() * 100);
System.out.print(valor + " ");
arbol.insertarNodo(valor);
}

System.out.println("\n\nRecorrido preorden");
arbol.recorridoPreorden();

System.out.println("\n\nRecorrido inorden");
arbol.recorridoInorden();

System.out.println("\n\nRecorrido posorden");
arbol.recorridoPosorden();
}
}

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".