Jump to content

HEEEELP con arboles binarios =/


Recommended Posts

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...