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