BuonSalve,
Mi sto approcciando alle strutture dati e in questo caso nello specifico gli alberi.
Questo è un esercizio:
"Scrivere una funzione ricorsiva struct treeNode * inalbera(int * a, int N) che, ricevuto in ingresso un array di N interi, restituisca un albero binario contenente tali interi. Che tipo di albero viene prodotto se l'array e' ordinato?"
Questo è il codice scritto fino adesso:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct tree_
{
struct tree_* left;
int data;
struct tree_* right;
}tnode;
typedef tnode* tlink;
tlink inalbera(int * a, int N)
{
if(N == 0)
{
tlink node = NULL;
return node;
}
else inalbera(a, N - 1);
}
void stampa(tlink pippo)
{ static int level = 0;
if(pippo)
{
level++;
stampa(pippo->left);
level--;
printf("%*s %d\n",level*5," ",pippo->data);
level++;
stampa(pippo->right);
level--;
}
}
int main()
{
srand(time(0));
printf("quanti elementi vuoi inserire?\n");
int n;
scanf("%d",&n);
int *a= malloc(sizeof(int)*n);
for(int i = 0; i < n; i++)
{
a[i] = rand() % 100+1;
printf("%d|", a[i]);
}
puts("");
/*tlink f = inalbera(a,n);
stampa(f); */
}
In teoria quello che chiede l'esercizio è appunto inserire gli elementi dell'array ricorsivamente in modo tale che il primo elemento dell'array coincida con quello della radice dell'albero e questo è evidenziato anche dal quesito posto alla fine. L'idea sarebbe quindi richiamare la funzione ricorsivamente fino ad avere il caso base dove viene creato il link alla radice ,e dopo, cominciare ad inserire in ordine tutti gli elementi dell'array in ordine nell'albero.