Rsk
06-06-2009, 14:26
Ho implementato una funzione che crea un albero binario e la ricerca postorder.. solo che quando cerco di eseguire la ricerca il programma si chiude..
sapete aiutarmi? :muro:
#include <stdio.h>
#include <stdlib.h>
typedef char elemento;
typedef struct nodo *tree_pointer;
typedef struct nodo {
elemento key;
tree_pointer figlio_sinistro;
tree_pointer figlio_destro;
} nodo;
void postorder(tree_pointer ptr);
void crea(tree_pointer *radice);
tree_pointer radice;
int main(int argc, char *argv[])
{
radice =(tree_pointer)malloc(sizeof(nodo));
crea(radice);
postorder(radice);
fflush(stdin);
getchar();
}
void crea(tree_pointer *radice)
{
tree_pointer ptr_sin, ptr_des;
elemento item;
char risp;
printf("Inserisci il dato : ");
scanf("%c",&item);
(*radice)->key=item;
printf("\n%c Ha figlio sinistro? (s/n)", (*radice)->key);
fflush(stdin);
risp=getchar();
fflush(stdin);
if(risp=='n') (*radice)->figlio_sinistro=NULL;
else{
ptr_sin=(tree_pointer)malloc(sizeof(nodo));
(*radice)->figlio_sinistro=ptr_sin;
crea(&ptr_sin);
}
printf("\n%c Ha figlio destro?", (*radice)->key);
fflush(stdin);
risp=getchar();
fflush(stdin);
if(risp=='n') (*radice)->figlio_destro=NULL;
else{
ptr_des = (tree_pointer)malloc(sizeof(nodo));
(*radice)->figlio_destro=ptr_des;
crea(&ptr_des);
}
}
void postorder(tree_pointer ptr)
{
if(ptr)
{
postorder(ptr->figlio_sinistro);
postorder(ptr->figlio_destro);
printf("%4c",ptr->key);
}
}
sapete aiutarmi? :muro:
#include <stdio.h>
#include <stdlib.h>
typedef char elemento;
typedef struct nodo *tree_pointer;
typedef struct nodo {
elemento key;
tree_pointer figlio_sinistro;
tree_pointer figlio_destro;
} nodo;
void postorder(tree_pointer ptr);
void crea(tree_pointer *radice);
tree_pointer radice;
int main(int argc, char *argv[])
{
radice =(tree_pointer)malloc(sizeof(nodo));
crea(radice);
postorder(radice);
fflush(stdin);
getchar();
}
void crea(tree_pointer *radice)
{
tree_pointer ptr_sin, ptr_des;
elemento item;
char risp;
printf("Inserisci il dato : ");
scanf("%c",&item);
(*radice)->key=item;
printf("\n%c Ha figlio sinistro? (s/n)", (*radice)->key);
fflush(stdin);
risp=getchar();
fflush(stdin);
if(risp=='n') (*radice)->figlio_sinistro=NULL;
else{
ptr_sin=(tree_pointer)malloc(sizeof(nodo));
(*radice)->figlio_sinistro=ptr_sin;
crea(&ptr_sin);
}
printf("\n%c Ha figlio destro?", (*radice)->key);
fflush(stdin);
risp=getchar();
fflush(stdin);
if(risp=='n') (*radice)->figlio_destro=NULL;
else{
ptr_des = (tree_pointer)malloc(sizeof(nodo));
(*radice)->figlio_destro=ptr_des;
crea(&ptr_des);
}
}
void postorder(tree_pointer ptr)
{
if(ptr)
{
postorder(ptr->figlio_sinistro);
postorder(ptr->figlio_destro);
printf("%4c",ptr->key);
}
}