[C con Clase] (sin asunto)
Steven R. Davidson
vze266ft en verizon.net
Mie Dic 6 00:12:23 CET 2006
Hola Cecilia,
Cecilia Macrini wrote:
> Hola!
> Necesito saber cómo es el código del recorrido en amplitud para árboles
> binarios en c++.
Daniel ya te ha dado un enlace para que puedas buscar información acerca
del tema que requieres. Sólo quiero dar una descripción y explicación de
lo que implica el recorrido en amplitud (level order traversal, en inglés).
Este recorrido visita todos los nodos de un árbol como si fuese una
lista secuencial. Es decir, recorremos los nodos por cada nivel o
profundidad. Para implementar esto, lo que debes hacer es usar una cola,
en la cual vayas metiendo cada nodo del árbol. Cuando sacas el primer
elemento de la cola, la visitas, y agregas a la cola los nodos hijos
inmediatos: el hijo izquierdo y luego el derecho. Por ejemplo,
1
/ \
2 3
/ \ / \
4 5 6 7
Empezamo por el nodo 1 que es agregado a la cola:
cola <- 1
Ahora agregamos sus nodos hijos inmediatos:
cola <- 1, 2, 3
Extraemos el elemento de la cola para hacer algo con ello, resultando en:
cola <- 2, 3
Ahora visitamos el nodo 2, y repetimos el mismo proceso:
cola <- 2, 3, 4, 5
Extraemos y operamos el nodo 2:
cola <- 3, 4, 5
Visitamos el nodo 3, agregando sus nodos hijos:
cola <- 3, 4, 5, 6, 7
Extraemos el nodo 3 y hacemos algo con ello:
cola <- 4, 5, 6, 7
Y así sucesivamente.
El algoritmo viene a ser el siguiente:
Recorrido_Amplitud( Arbol raiz )
1. Crear una cola: C
2. C.Agregar( raiz );
3. Mientras que !C.EstaVacio(), hacer
4. Nodo n <- C.Mirar()
5. Si n.izq existe, entonces
6. C.Agregar( n.izq )
5. Si n.der existe, entonces
6. C.Agregar( n.der )
7. C.Extraer()
8. HacerAlgo( n )
9. Terminar
Espero
Steven
Más información sobre la lista de distribución Cconclase