PDA

View Full Version : [C] Problema albero binario


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);
}
}

wingman87
06-06-2009, 19:40
Quando richiami "crea" nel main dovresti passargli &radice. Ma dovrebbe avertelo segnalato il compilatore...

Rsk
07-06-2009, 10:20
grazie mille :D