Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Heroic en 02 de Junio 2021, 23:14
-
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:
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();
}
}
-
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).
//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();
}
}