Ti propongo un algoritmo ricorsivo, che è piu semplice, l'ideà è di passare come argomento il valore che rappresenta il livello corrente (currentLevel), oltre al valore che rappresenta il livello da stampare (level); il livello inizio a contarlo dalla radice, cioè la radice ha livello zero; figli della radice hanno livello 1, ecc ecc... Se inizi a contare il livello dalle foglie, l'algoritmo è diverso:

codice:
void printLevel(tree T, int currentLevel, int level){
    if(T == NULL)
        return;

    if(curentLevel == level){
         printf("%d\n", T -> elem);
         //Se questo nodo è a livello level non c'è bisogno di
         //richiamare la procedura sui figli che saranno a
         //livello magiore
         return;
    }
    printLevel(T -> left, currentLevel + 1, level);
    printLevel(T -> right, currentLevel + 1, level);
}