Alguien podría ayudarme a terminar este método? Consiste en recorrer un árbol usando cola. No puedo usas los típicos getLeft() y getRight(), solo cuento con getSon() y ademas
Este el cogido que tengo por ahora:
```
public void amplitud(){
NodoArbol nodo=raiz;
Cola cola = new Cola();
if(nodo!=null){
cola.encolar(nodo);
}
while(!cola.vacia()){
nodo=cola.desencolar();
System.out.println(nodo.getData()+" ");
if(nodo.getSon()!=null){
cola.encolar(nodo.getSon()); //Aquí ya no se seguir, de hecho me marca como error esta linea
...
}
}
}
```
No se si seguir por ahí o hacer :
```
public void amplitud(){
return amplitud(raiz)
}
private void amplitud(NodoArbol nodo){
Cola cola = new Cola();
if(nodo!=null){
cola.encolar(nodo);
}
while(!cola.vacia()){
nodo=cola.desencolar();
System.out.println(nodo.getData()+" ");
if(nodo.getSon()!=null){
cola.encolar(nodo.getSon()); //Aquí ya no se seguir, de hecho me marca como error esta linea
...
}
}
}
```
Además de todo ello podría usar iteradores, en concreto podría utilizar uno que va hacia delante y otro que va hacia atrás.
Si alguno tiene alguna idea de como seguir o algún consejo os lo agradecería mucho, estoy atascado y necesito conseguir este método para poder avanzar en la práctica.
Muchas gracias
Hola,
El recorrido en amplitud (BFS) con una cola es siempre el mismo patrón, independientemente de si el árbol es binario o no: metes la raíz en la cola, y mientras la cola no esté vacía, sacas un nodo, lo procesas, y metes todos sus hijos (con getSon(), en tu caso) al final de la cola:
public void amplitud() {
NodoArbol nodo = raiz;
Cola cola = new Cola();
cola.encolar(nodo);
while (!cola.esVacia()) {
nodo = cola.desencolar();
System.out.println(nodo.getDato());
for (NodoArbol hijo : nodo.getSon()) {
if (hijo != null) {
cola.encolar(hijo);
}
}
}
}
Doy por hecho que getSon() te devuelve algo recorrible (un array o una lista de NodoArbol) con todos los hijos del nodo, no solo uno, ya que mencionas que no tienes getLeft()/getRight() porque tu árbol no es necesariamente binario. Si getSon() devuelve un único hijo en vez de una colección, cuéntamelo y te lo adapto, pero la lógica de fondo (cola FIFO, procesar y encolar hijos) es siempre la misma para BFS.
El punto clave que diferencia BFS de un recorrido en profundidad (DFS): aquí usamos una cola (FIFO, primero en entrar primero en salir), mientras que DFS usaría una pila o recursión. Ese único cambio de estructura de datos es lo que hace que se visite nivel a nivel en vez de profundizar en una rama antes de pasar a la siguiente.
David Carrero