PS. Se a qualcuno dovesse interessare, lascio qui una possibile realizzazione:
#include <stdio.h>
#include <stdlib.h>
typedef struct t_albero
{
int val;
struct t_albero *left;
struct t_albero *right;
} Nodo;
typedef Nodo* Albero;
Albero creaNodo(int val)
{
Albero nuovo = malloc(sizeof(Nodo));
nuovo->val = val;
nuovo->left = NULL;
nuovo->right = NULL;
return nuovo;
}
Albero inserisci(Albero a, int v)
{
Albero nuovo_nodo = creaNodo(v);
if(a == NULL)
{
return nuovo_nodo;
}
Albero copia = a;
if(v <= a->val)
{
a->left = inserisci(a->left, v);
}
else
{
a->right = inserisci(a->right, v);
}
return copia;
}
int conta_elementi(Albero alb)
{
if(alb == NULL)
return 0;
return(1 + conta_elementi(alb->left) + conta_elementi(alb->right));
}
void stampa_in_ordine(Albero alb)
{
if(alb == NULL)
return;
stampa_in_ordine(alb->left);
printf("%d ", alb->val);
stampa_in_ordine(alb->right);
}
void albero_to_array(Albero alb, int* array, int* posiz_array)
{
if(alb == NULL)
return;
albero_to_array(alb->left, array, posiz_array);
array[(*posiz_array)++] = alb->val;
albero_to_array(alb->right, array, posiz_array);
}
void stampa_array(int* array, int dim)
{
int i;
for(i=0; i<dim; i++)
{
printf("%d ", array[i]);
}
}
int main()
{
Albero alb = NULL;
alb = inserisci(alb, 5);
alb = inserisci(alb, 1);
alb = inserisci(alb, 2);
alb = inserisci(alb, 7);
alb = inserisci(alb, 3);
alb = inserisci(alb, 8);
printf("Albero: ");
stampa_in_ordine(alb);
int n_elem = conta_elementi(alb);
int array[n_elem];
int posiz_array = 0;
printf("\n");
albero_to_array(alb, array, &posiz_array);
printf("Array: ");
stampa_array(array, n_elem);
return 0;
}