PDA

View Full Version : [C] Inizio Alberi


lucas87
05-05-2007, 17:28
Salve, ho appena iniziato a studiare gli alberi e ho fatto un semplice esercizio in C che mi passa da un vettore a un albero e poi mi effettua una stampa simmetrica,ho provato anche con stampa con visita posticipata o anticipata, ma non cambia niente, fino alla lettura del vettore e al passaggio dal vettore all'albero dovrebbe andare, ma anche se la funzione della stampa è corretta fa crashare tutto. Chi mi sa dare una mano?

Grazie in anticipo.


#include <stdio.h>
#include <stdlib.h>

typedef int data;

struct nodo{
data d;
struct nodo *sx;
struct nodo *dx;
};

typedef struct nodo NODE;
typedef NODE *BTREE;


BTREE init_node(data,BTREE,BTREE);
BTREE create_tree(data a[],int,int);

void leggi_array(int *, int );

void inorder(BTREE);



int main(){
BTREE root;
int dim;
int i=0;
printf("Immetti la dimensione del Array:");
scanf("%d",&dim);
int v[dim];
leggi_array(v,dim);
root=create_tree(v,i,dim);
inorder(root);

system("PAUSE");
}

void inorder(BTREE root){
if (root!=NULL){
inorder(root->sx);
printf("%d",root->d);
inorder(root->dx);
}
}



void leggi_array(int *vett, int d){
int i;
for(i=0;i<d;i++){
printf("Immetti vett[%d]= ",i);
scanf("%d",&vett[i]);
}
}


BTREE init_node(data d1,BTREE p1,BTREE p2){

BTREE t;
t=malloc(sizeof(NODE));
t->d=d1;
t->sx=p1;
t->dx=p2;
return t;
}

BTREE create_tree(data a[],int i,int size){
if (i>=size) return NULL;
else {
init_node(a[i],create_tree(a,2*i+1,size),create_tree(a,2*i+2,size));
}
}

cionci
05-05-2007, 18:50
init_node(a[i],create_tree(a,2*i+1,size),create_tree(a,2*i+2,size));

Direi che ti serve un return su questa linea ;)

lucas87
05-05-2007, 19:42
Non dovrebbe ritornare gia dalla funzione che è chiamata a sua volta da create tree?

No come non detto ora va che è una bellezza. Grazie al forume a cionci come sempre.