Lo so che hai risolto...ma secondo te questa funzione può andare (senza funzioni ausiliarie)?
codice:
int OrderStatistic(TREENODEPTR t, int *i)
{
  if( !t )
    return MAX_INT;
  if( !t->left )
  {
    return t->value;
  }
  else
  {
    int r = OrderStatistic(t->left, i);
    if( *i > 1 )
    {
      r = t->value;
      *i--;
    }
  }
  return r;
}
ovviamente l'albero deve essere ordinato