Anterior Home Siguiente

Funciones para implementar Arboles Binarios

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