Il tuo errore è non incrementi correttamente index.
Dovresti partire dal codice che visita (in un qualsiasi ordine) il tuo albero, es.:
void visita( tnodo *nodo )
{
if(nodo == NULL)
return;
printf( "Nodo %d\n", nodo->key );
if(nodo->left != NULL)
visita(nodo->left);
if(nodo->right != NULL)
visita(nodo->right);
}
Su questa struttura devi fare una funzione che solo conta:
void visita_conta( tnodo *nodo, int *conta )
{
if(nodo == NULL)
return;
//printf( "Nodo %d\n", nodo->key );
(*conta) ++;
if(nodo->left != NULL)
visita_conta(nodo->left, conta);
if(nodo->right != NULL)
visita_conta(nodo->right, conta);
}
Allo stesso modo devi fare un funzione che riempie un array
void visita_riempi( tnodo *nodo, int *ar, int *index )
{
if(nodo == NULL)
return;
//printf( "Nodo %d\n", nodo->key );
ar[*index]=node->key;
(*index) ++;
if(nodo->left != NULL)
visita_riempi(nodo->left, ar, index);
if(nodo->right != NULL)
visita_riempi(nodo->right, ar, index);
}
La sequenza sarà di questo tipo
int conta;
int index;
conta = 0;
visita_conta(albero,&conta);
// alloco "conta" elementi
// ......
index =0;
visita_riempi(albero, V, &index);