Si l'output è uguale anche con la tua versione, per quanto riguarda l'albero sono abbastanza sicuro di averlo costruito come si deve, comunque se vuoi dargli un'occhiata di posto l'intero codice:
codice:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 10
struct bit_node{
int item;
struct bit_node *l, *r;
};
typedef struct bit_node *Bit_node;
Bit_node bit_left(Bit_node p){
if(p){
return(p->l);
}
return NULL;
}
Bit_node bit_right(Bit_node p){
if(p){
return(p->r);
}
return NULL;
}
Bit_node bit_new (int item){
Bit_node new;
new=malloc(sizeof(struct bit_node));
if(new == NULL){
printf("\nMemoria Esaurita\n");
exit(EXIT_FAILURE);
}
new->item=item;
new->l= NULL;
new->r=NULL;
return new;
}
void printnode(Bit_node p){
printf("%d ",p->item);
}
void bit_preorder(Bit_node p){
if(p){
printnode(p);
bit_preorder(p->l);
bit_preorder(p->r);
}
}
void bit_inorder(Bit_node p){
if(p){
bit_inorder(p->l);
printnode(p);
bit_inorder(p->r);
}
}
void bit_postorder(Bit_node p){
if(p){
bit_postorder(p->l);
bit_postorder(p->r);
printnode(p);
}
}
void bit_printassummary(Bit_node p, int spaces) {
int i;
if(p) {
for(i = 0; i < spaces; i++) {
putchar(' ');
}
printf("*%d\n", p -> item);
spaces++;
bit_printassummary(p -> l, spaces);
bit_printassummary(p -> r, spaces);
}
}
Bit_node bit_arr2tree(int a[], int size, int j){
Bit_node root=bit_new(a[j]);
int left = 2*j+1, right = 2*j+2;
if(left < size){
root -> l = bit_arr2tree(a, size, left);
}
if(right < size) {
root -> r = bit_arr2tree(a, size, right);
}
return root;
}
int main(void){
int array[N];
int i;
Bit_node root;
srand(time(NULL));
/*generazione array di numeri casuali da 1 a 100*/
for(i=0; i<N; i++) {
array[i]=rand()%100+1;
}
/*stampo l'array*/
printf("\nARRAY:\n");
for(i=0; i<N; i++) {
printf("%d ", array[i]);
}
printf("\n\n");
printf("*************************\n");
/*creazione albero*/
root=bit_arr2tree(array, N, 0);
printf("inorder\n");
bit_inorder(root);
printf("\n\n");
printf("preorder\n");
bit_preorder(root);
printf("\n\n");
printf("postorder\n");
bit_postorder(root);
printf("\n\n");
printf("**************************\n\n");
bit_printassummary(root, 0);
return 0;
}
Grazie ancora per l'aiuto