| Anterior | Home | Siguiente |
Definición de estructuras para nodos del árbol
typedef struct NODO
{
int dato;
struct NODO *der; /* rama derecha */
struct NODO *izq; /* rama izquierda */
} Arbol;
Función para crear la raíz del árbol
Arbol *Crear_Arbol(int valor)
{
Arbol *nodoarb;
nodoarb=(Arbol *)malloc(sizeof(Arbol));
nodoarb->dato=valor;
nodoarb->der=NULL;
nodoarb->izq=NULL;
return nodoarb;
}
Función para insertar un nodo en el árbol
void insertar(Arbol *nodoarb, int valor)
{
if (nodoarb==NULL)
/* si el nodo está vacío lo llena */
{
nodoarb=(Arbol *)malloc(sizeof(Arbol));
/* reserva espacio para el nodo */
nodoarb->dato=valor;
nodoarb->der=NULL;
nodoarb->izq=NULL;
}
else
/* de lo contrario ve si el elemento a insertar es menor o
mayor que el nodo padre */
{
if (valor < nodoarb->dato) insertar(nodoarb->izq, valor);
else
{
if (valor > nodoarb->dato) insertar(nodoarb->der, valor);
/* evita que se dupliquen datos */
else printf("\nDato duplicado\n");
}
}
}
Imprime el contenido del árbol en pre-orden
void preorden(Arbol *nodoarb)
{ /* Se empieza desde el nodo raíz y luego imprime el nodo que se
encuentra a la izquierda y luego este nuevo nodo se convierte en
el nodo raiz o principal e imprime el nodo a la izquierda y a
la derecha de el, es decir que el proceso es similar al del
nodo raíz, una vez que se hayan terminado todos los nodos del
lado izquierdo, empieza a hacer el mismo proceso pero ahora
para los nodos del lado derecho a el */
if (nodoarb!=NULL)
{
printf("%d ",nodoarb->dato);
preorden(nodoarb->izq); /* búsqueda a la izquierda */
preorden(nodoarb->der); /*búsqueda a la derecha */
}
}
Imprime el contenido del arbol en in-orden
void inorden(Arbol *nodoarb)
{ /* Se irá a buscar el nodo más a la izquierda, una vez que se
encontró el valor más a la izquierda regresa al nodo superior
a él y este se va a la derecha para ver si hay elementos que
imprimir, si los hay se imprime, de lo contrario este imprime
el nodo en donde se encuentra, convirtiendose, este nodo en
el nodo mas a la izquierda y vuelve a imprimir el nodo y
regresa al nodo superior y busca el nodo a la derecha */
if (nodoarb!=NULL)
{
inorden(nodoarb->izq); /* búsqueda a la izquierda */
printf("%i ",nodoarb->dato);
inorden(nodoarb->der); /* búsqueda a la derecha */
}
}
Imprime el contenido del árbol en post-orden
void postorden(Arbol *nodoarb)
{
/* Se busca hasta el nivel mas alto (hasta el último nodo padre),
inmediatamente se imprime el lado izquierdo y luego el lado
derecho, y despues el nodo superior a estos y asi se hace
nuevamente con los de mas nodos, una vez terminado el lado
izquierdo del nodo raíz, se va hasta el nivel mas alto del lado
derecho y vuelve hacer la misma impresión */
if (nodoarb != NULL)
{
postorden(nodoarb->izq);/* búsqueda izquierda */
postorden(nodoarb->der);/* búsqueda derecha */
printf("%i ",nodoarb->dato);
}
}
| Anterior | Home | Siguiente |
© 2000 Made in Bufoland