Salve,
Il codice dovrebbe generare un albero di ricerca derivato da un array e stampare la visita simmetrica purtroppo mi da segmentation fault subito dopo aver immesso i valori dell'array ,
tramite varie prove son riuscito a capire che l'errore deve stare nelle righe tra l'inizio del main e l'allocazione dinamica del puntatore alla struct nodo p,
qualcuno è così gentile da spiegarmi come mai incorro in questa segmentation fault ? proprio non riesco a spiegarmi il perchè
codice:
// VISITA SIMMETRICA RICORSIVA ALL'ALBERO
#include<stdio.h>
#include<stdlib.h>
typedef struct nodo* punt;
struct nodo{
int dato;
punt sx;
punt dx;
};
void NodeGen(int *A, int i, punt p){
punt temp;
punt predec;
temp=(punt)malloc(sizeof(struct nodo));
predec=(punt)malloc(sizeof(struct nodo));
*predec=*p;
while(predec!=NULL){
*temp=*predec;
if(A[i]>predec->dato)
predec=predec->dx;
else
predec=predec->sx;
}
if(A[i]>temp->dato)
temp->dx=predec;
if(A[i]<temp->dato)
temp->sx=predec;
predec->dato=A[i];
predec->sx=NULL;
predec->dx=NULL;
}
void VisitaSimmetrica(punt p){
if(p->sx!=NULL && p->dx!=NULL){
VisitaSimmetrica(p->sx);
printf("%d", p->dato);
VisitaSimmetrica(p->dx);
}
else{
if(p->sx==NULL ){
if(p->dx==NULL){
printf("%d",p->dato);
}
else{
printf("%d",p->dato);
VisitaSimmetrica(p->dx);
}
}
else{
if(p->dx==NULL){
VisitaSimmetrica(p->sx);
printf("%d",p->dato);
}
}
}
}
int main(){
int i,N;
int *A;
punt p;
scanf("%d",&N);
A=malloc(N*sizeof(int));
for(i=0;i<N;i++)
scanf("%d",&A[i]);
printf(" è ora della Segmentation Fault ");
p=(punt)malloc(sizeof(struct nodo));
p->dato=A[0];
p->sx=NULL;
p->dx=NULL;
for(i=1;i<N;i++)
NodeGen(A,i,p);
VisitaSimmetrica(p);
}