Probabilmente perchè non è C++ o Ansi C99 (dato che è il gcc probabilmente compila il file come C becero
)
Comunque mi è anche venuta in mente una funzione per un albero non ordinato..farei
codice:
struct recMinValue
{
int v;
recMinValue *prev;
recMinValue(int i) { v = i; prev = NULL; }
}
recMinValue *tail = NULL;
recMinValue *head = NULL;
int OrderStatistic(TREENODEPTR t, int *i)
{
void traverse(t)
{
if( t->right )
traverse(t->right);
if( t->left )
traverse(t->left);
aggiungere t->value a lista mantenendone l'ordine (in testa i valori minori)
}
if( !t )
return MAX_INT;
head = tail = NULL;
traverse(t, i);
ritornare il valore dell'elemento i-esimo della lista ordinata
return r;
}
Ovviamente non compila e non è completa (purtroppo ora non ho molto tempo
) L'idea è di mantere una lista accessoria ordinata con in testa i valori minori....riempirla con un semplice attraversamento dell'albero mantenendo l'ordinamento (in maniera non troppo complessa in fondo) e poi ritornare l'i-esimo elemento partendo dalla testa.
Sicuramente questo metodo occupa memoria ed è più lento...ma se l'albero non è ordinato non credo di conoscere un metodo più furbo (in fondo questo metodo è un trucchetto...siccome l'albero non è ordinato creo una lista ordinata e uso quella)