DarkTutox Posted July 12, 2011 Report Share Posted July 12, 2011 Tengo un gran problema, al momento de compilarlo, corre todo bien, pero al momento de agregarle un dato y presionar enter se cae =/ ya no se donde puede estar el error porfa necesito una ayuda pleeeeeeeease!!!!!!!!!!!! desde ya muchas gracias. [hide] #include <stdio.h> #include <ctype.h> #include <stdlib.h> #include <string.h> #include <conio.h> #define true 1 void PORTADA(void); void intro_nodo(void); void lista_nodos(void); void borra_nodo(void); void lista_preorden(); void lista_inorden(); void lista_postorden(); struct arbol *borra(); struct arbol *crea_arbol(); struct arbol{ char clave; struct arbol *izquierda; struct arbol *derecha; }; struct arbol *raiz; struct arbol *borra (struct arbol *raiz, char nodo){ struct arbol *d1, *d2; if(raiz->clave == nodo){ if(raiz->izquierda == raiz->derecha){ free(raiz); return (NULL); } else if(raiz->izquierda == NULL){ d1 = raiz->derecha; free(raiz); return (d1); } else if(raiz->derecha == NULL){ d1 = raiz->izquierda; free(raiz); return (d1); } else{ d2 = raiz->derecha; d1 = raiz->derecha; while(d1->izquierda)d1 = d1->izquierda; d1->izquierda = raiz->izquierda; free(raiz); return(d2); } } if(raiz->clave<nodo) raiz->derecha = (struct arbol *)borra(raiz->derecha, nodo); else raiz->izquierda = (struct arbol *)borra(raiz->izquierda, nodo); return raiz; } struct arbol *crea_arbol(struct arbol *raiz, struct arbol *aux, char dato){ if(!aux){ aux = (struct arbol *)malloc (sizeof(struct arbol)); aux->izquierda = (struct arbol *)NULL; aux->derecha = (struct arbol *)NULL; aux->clave = dato; if(!raiz)raiz = (struct arbol *) crea_arbol(raiz, raiz, dato); else raiz->derecha = aux; return aux; } if (dato < aux->clave) (struct arbol*)crea_arbol(aux, aux->izquierda, dato); else if(dato > aux->clave) (struct arbol *)crea_arbol(aux, aux->derecha, dato); } void intro_nodo(void){ char dato; do{ printf("\n\tIntroduzca dato: "); gets(&dato); if(!raiz)raiz = (struct arbol *)crea_arbol(raiz, raiz, dato); else (struct arbol *) crea_arbol(raiz, raiz, dato); }while(dato); } void borra_nodo(void){ char dato; printf("\n\tDato a borrar: "); gets(&dato); (struct arbol *) borra (raiz, dato); } void lista_preorden(struct arbol *aux){ int orden; if(!aux)return; printf("\n\t%c\t", aux->clave); lista_preorden(aux->izquierda); lista_preorden(aux->derecha); } void lista_inorden(struct arbol *aux){ int orden; if(!aux)return; lista_inorden(aux->izquierda); printf("\n\t%c\t", aux->clave); lista_inorden(aux->derecha); } void lista_postorden(struct arbol *aux){ int orden; if(!aux)return; lista_postorden(aux->izquierda); lista_postorden(aux->derecha); printf("\n\t%c\t", aux->clave); } void lista_nodos(void){ clrscr(); printf("\n\tListado de los nodos del arbol"); printf("\n\tP.............Preorden"); printf("\n\tI.............Inorden"); printf("\n\tS.............Postorden"); switch(toupper(getche())){ case 'P': lista_preorden(raiz); break; case 'I': lista_inorden(raiz); break; case 'S': lista_postorden(raiz); break; } } void main(void){ raiz = (struct arbol *)NULL; while(true){ clrscr(); printf("\n\tMenu del programa de un arbol"); printf("\n\tA.............Añadir nodo"); printf("\n\tL.............Listado de nodos"); printf("\n\tB.............Borrar nodos"); printf("\n\tX.............Terminar"); switch(toupper(getche())){ case 'A': intro_nodo(); break; case 'L': lista_nodos(); break; case 'B': borra_nodo(); break; case 'X': exit(0);}}} [/hide] Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now