Hola ! Oye no corre este programa me marca un error

/*Este programa me marca un error en la funcion Buscar y al final con el return me da problemas agradeciria tu ayuda!! Jeje!!*/
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include
<process.h>
#include <dos.h>
struct Arbol{
char Dato;
struct Arbol *Izq;
struct Arbol *Der;};
void Menu(void);
void error(void);
struct Arbol *Buscar(struct Arbol * ,char);
struct Arbol *Borrar(struct Arbol * ,char);
void InsertarNodo (struct Arbol **,char);
void Imprime (struct Arbol *Raiz,int);
void InOrden (struct Arbol *Raiz);
void PostOrden(struct Arbol *Raiz);
void PreOrden (struct Arbol *Raiz);
enum{insertar=1,buscar,imprime,
inorden,postorden,preorden,salir};
int main()
{
char dato;
int opcion;
struct Arbol *Raiz=NULL;
Menu();
scanf("%d",&opcion);
while(opcion!=salir){
switch(opcion){
case insertar:printf("Introduce un caracter: ");
scanf("\n%c",&dato);
InsertarNodo(&Raiz,dato);
break;
case buscar: printf("Introduzca el caracter a buscar: ");
scanf("\n%c",&dato);
if(Buscar(Raiz,dato))
printf("Elemento encontrado.\n");
else printf("El elemento no se encontro en el arbol.\n");
getch();
break;
case imprime:
printf("El arbol es:\n");
Imprime(Raiz,0);
getch();
break;
case inorden:
printf("En Inorden es:\n");
InOrden(Raiz);
getch();
break;
case postorden:printf("En Postorden es:\n");
PostOrden(Raiz);
getch();
break;
case preorden:printf("En preorden es:\n");
PreOrden(Raiz);
getch();
break;
default: gotoxy(32,22);printf("Opcion Incorrecta.");
getch();
Menu();
break;
}
Menu();
scanf("%d",&opcion);
}
gotoxy(32,24);
printf("Fin de %s",__FILE__);
sleep(1);
clrscr();
return 0;
}
void error(void)
{
perror("error: No hay memoria suficiente.");
getch();
abort();
}
void PreOrden(struct Arbol *Raiz)
{
if(!Raiz) return;
if(Raiz->Dato)
printf("%c-> ",Raiz->Dato);
PreOrden(Raiz->Izq);
PreOrden(Raiz->Der);
}
void PostOrden(struct Arbol *Raiz)
{
if(!Raiz) return;
PostOrden(Raiz->Izq);
PostOrden(Raiz->Der);
if(Raiz->Dato)
printf("%c-> ",Raiz->Dato);
}
void InOrden(struct Arbol *Raiz)
{
if(!Raiz) return;
InOrden(Raiz->Izq);
if(Raiz->Dato)
printf("%c-> ",Raiz->Dato);
InOrden(Raiz->Der);
}
void InsertarNodo(struct Arbol **Raiz,char valor)
{
if(*Raiz==NULL){
*Raiz=(struct Arbol *)malloc(sizeof(struct Arbol));
if(*Raiz!=NULL){
(*Raiz)->Dato=valor;
(*Raiz)->Izq=NULL;
(*Raiz)->Der=NULL;
}
else{
printf("%c no insertado.\n",valor);
error();
}
}
else if(valor<(*Raiz)->Dato)
InsertarNodo(&((*Raiz)->Izq),valor);
else if(valor>(*Raiz)->Dato)
InsertarNodo(&((*Raiz)->Der),valor);
else printf("Dato duplicado.\n");
}
void Imprime(struct Arbol *Raiz,int n)
{
int i;
if(Raiz!=NULL){
Imprime(Raiz->Der,n+1);
for(i=0;i<n;++i)
printf(" ");
printf("%c\n",Raiz->Dato);
Imprime(Raiz->Izq,n+1);
}
}
struct Arbol *Buscar(struct Arbol *Raiz,char clave)
{
if(!Raiz) return Raiz;
while(Raiz->Dato!=clave){
if(clave<Raiz->Dato) Raiz=Raiz->Izq;
else Raiz=Raiz->Der;
if(Raiz==NULL) break;
return Raiz;
}
struct Arbol *Borrar(struct Arbol *Raiz,char clave)
{
struct Arbol *p,*p2;
if(!Raiz){
printf("%c elemento no encontrado.\n",clave);
return Raiz;
}
if(Raiz->Dato==clave){
if(Raiz->Izq==Raiz->Der){
free(Raiz);
return NULL;
}
else if(Raiz->Izq==NULL){
p=Raiz->Der;
free(Raiz);
return p;
}
else if(Raiz->Der==NULL){
p=Raiz->Izq;
free(Raiz);
return p;
}
else{
p2=Raiz->Der;
p=Raiz->Der;
while(p->Izq)
p=p->Izq; p->Izq=Raiz->Izq; free(Raiz);
return p2;}}
if(Raiz->Dato < clave)
Raiz->Der=Borrar(Raiz->Der,clave);
else
Raiz->Izq=Borrar(Raiz->Izq,clave);
return Raiz;
}
void Menu(void)
{
system("cls");
gotoxy(32,10);
printf("Escoja su opcion:");
gotoxy(32,12);
printf("1. Insertar.");
gotoxy(32,13);
printf("2. Buscar.");
gotoxy(32,14);
printf("3. Imprimir.");
gotoxy(32,15);
printf("4. Inorden.");
gotoxy(32,16);
printf("5. PostOrden.");
gotoxy(32,17);
printf("6. Preorden.");
gotoxy(32,18);
printf("7. Salir.");
gotoxy(32,19);
printf("-> ");
system("PAUSE");
return 0;
}
Respuesta
1
Lo del return puede ser que faltan los paréntesis (ej. return(0)), lo de la función Buscar no sé que puede ser. La verdad es que estoy mas dedicado a resolver temas de comunicaciones con sockets y manejo de procesos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas