Implementación en Java para hacer un recorrido en anchura (amplitud) en un árbol binario.
He aquí una implementación en Java para hacer un recorrido en anchura (amplitud) de la estructura de datos denominada árbol binario.
Este código lo cree después de buscar por muchas horas en Google y en ninguna otra página sin éxito. Ninguna de las páginas tenía hecha alguna implementación concreta de este código, solo muestran una idea.
Este código es bastante complicado de entender con pseudocódigo, es más fácil entenderlo mirando algún código ya hecho y estoy seguro que muchos se habrán visto en aprietos a la hora de hacer algún proyecto recorriendo una estructura de árbol binario.
Para hacer un recorrido en anchura, la idea es ir guardando en una cola los hijos del nodo que se están visitando y el siguiente a visitar es el próximo nodo de la cola.
El código se ha comentando para que resulte más sencillo entender el ejercicio.
public void amplitud(NodoArbol a) //SE RECIBE LA RAIZ DEL ARBOL
{
Cola cola, colaAux; //DEFINICIÓN DE 2 VARIABLES DE TIPO COLA
NodoArbol aux; //DEFINICIÓN AUX DE TIPO NODOARBOL
if (a != null) //SI EL ÁRBOL CONTIENE NODOS...
{
cola=new Cola(); //SE INSTANCIA EL OBJETO COLA
colaAux=new Cola(); //SE INSTANCIA EL OBJETO COLAAUX
cola.push(a); //SE INSERTA EL NODOARBOL "A" (RAIZ) COMO PRIMER NODO EN LA COLA
while (cola.colavacia()!=1) //MIENTRAS HAYAN ELEMENTOS EN LA COLA...
{
colaAux.push(aux=cola.pop()); /*EL ELEMENTO EXTRAIDO DE LA COLA PRINCIPAL ES ASIGNADO
A AUX Y A SU VEZ INSERTADO EN LA COLA AUXILIAR*/
if (aux.izq != null) //SI EL HIJO IZQUIERDO DEL NODO ACTUAL EXISTE
{
cola.push(aux.izq); //SE INSERTA ESE HIJO COMO ELEMENTO SIGUIENTE EN LA COLA
}
if (aux.der!= null) //SI EL HIJO DERECHO DEL NODO ACTUAL EXISTE
{
cola.push(aux.der); //SE INSERTA ESE HIJO COMO ELEMENTO SIGUIENTE EN LA COLA
}
}
colaAux.print(); //POR ÚLTIMO SE IMPRIME LA COLA AUXILIAR
}
}
Este código lo cree después de buscar por muchas horas en Google y en ninguna otra página sin éxito. Ninguna de las páginas tenía hecha alguna implementación concreta de este código, solo muestran una idea.
Este código es bastante complicado de entender con pseudocódigo, es más fácil entenderlo mirando algún código ya hecho y estoy seguro que muchos se habrán visto en aprietos a la hora de hacer algún proyecto recorriendo una estructura de árbol binario.
Para hacer un recorrido en anchura, la idea es ir guardando en una cola los hijos del nodo que se están visitando y el siguiente a visitar es el próximo nodo de la cola.
El código se ha comentando para que resulte más sencillo entender el ejercicio.
public void amplitud(NodoArbol a) //SE RECIBE LA RAIZ DEL ARBOL
{
Cola cola, colaAux; //DEFINICIÓN DE 2 VARIABLES DE TIPO COLA
NodoArbol aux; //DEFINICIÓN AUX DE TIPO NODOARBOL
if (a != null) //SI EL ÁRBOL CONTIENE NODOS...
{
cola=new Cola(); //SE INSTANCIA EL OBJETO COLA
colaAux=new Cola(); //SE INSTANCIA EL OBJETO COLAAUX
cola.push(a); //SE INSERTA EL NODOARBOL "A" (RAIZ) COMO PRIMER NODO EN LA COLA
while (cola.colavacia()!=1) //MIENTRAS HAYAN ELEMENTOS EN LA COLA...
{
colaAux.push(aux=cola.pop()); /*EL ELEMENTO EXTRAIDO DE LA COLA PRINCIPAL ES ASIGNADO
A AUX Y A SU VEZ INSERTADO EN LA COLA AUXILIAR*/
if (aux.izq != null) //SI EL HIJO IZQUIERDO DEL NODO ACTUAL EXISTE
{
cola.push(aux.izq); //SE INSERTA ESE HIJO COMO ELEMENTO SIGUIENTE EN LA COLA
}
if (aux.der!= null) //SI EL HIJO DERECHO DEL NODO ACTUAL EXISTE
{
cola.push(aux.der); //SE INSERTA ESE HIJO COMO ELEMENTO SIGUIENTE EN LA COLA
}
}
colaAux.print(); //POR ÚLTIMO SE IMPRIME LA COLA AUXILIAR
}
}
Alberto Tigrera
Estudiante de Computación