Академический Документы
Профессиональный Документы
Культура Документы
Una de los recorridos más usados (inorden) es el que rescata los datos en forma
ordenada (de menor a mayor).
El criterio para escoger una de las tres depende del problema , pero generalmente
los criterios generales son los siguientes :
Cola : los datos quieren ser vistos en el mismo orden en el cual fueron
recorridos y la cola pasa a ser un instrumento de almacenamiento de "corto plazo"
: (almacenar , ver , vaciar ).
Lista : los datos necesitan ser almacenados y se requieren operaciones en
donde es necesario acceder a los datos en cualquier posición.
Pila : se necesita que los datos se almacenen en forma de pila, pasando a ser
un instrumento de almacenamiento de "corto plazo".
Definición de Recorridos
Ejemplo
Recorridos
inorden : 10 , 30 , 50 , 55 , 60 , 80
preorden : 60 , 30 , 10 , 50 , 55 , 80
postorden : 10 , 55 , 50 , 30 , 80 , 60
Se declara una función que recibe como parámetros un arbol binario y una cola.
*nota : Hay que tener cuidado en verificar que la cola que se pasa como parámetro
sea no vacía. Las funciones serán implementadas en el archivo "funcArbin.h".
Las otras dos funciones que implementan los recorridos de preorden y postorden
son similares, por lo que se omite mayor explicación.
El programa consiste en formar un árbol binario igual al del ejemplo (ver figura) ,
para luego hacer un recorrido inorden y mostrar los números que se encuentran
ordenados en la cola.
*nota : como la cola se vacía mientras se recorren los datos para imprimirlos, sólo
basta con liberar memoria para el árbol binario.
#include<stdio.h>
#include<stdlib.h>
/* declaración de tipos */
/* archivos necesarios */
#include "tadCola.h"
#include "tadArbin.h"
#include "funcArbin.h"
int main()
{
Arbin a = arbinVacio();
Cola c = inicCola();
inordenArbin(a,c);
int aux;
while(!vaciaCola(c))
{
aux = infoCola(c);
printf("\t%d",aux);
elimCola(c);
}
/* Se destruye el árbol */
destruirArbin(a);
return 0;
}
Implementación de funciones
/* funcArbin.h */
void destruirArbin(Arbin a)
{
if(!vacioArbin(a))
{
destruirArbin(a->izq);
destruirArbin(a->der);
free(a);
}
}