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