"uscire direttamente senza risalire lo stack" è impossibile... in ogni caso questa funzione nn funziona (scusa il giro di parole :P) tranne il caso in cui il nodo cercato è proprio la radice perchè manca qualche assegnazione...
io la farei così:
template <class T>
typename BinAlbero<T>::posizione BinAlbero<T>::trova_nodo(T a, posizione p){
bool trovato;
posizione q = NULL; // devi assegnare a q il valore che per te significa "nessun valore", per esempio: NULL, oppure NIL
trovato = a==legginodo(p);
if(!trovato){
if(!sinistroVuoto(p)){
q = trova_nodo(a, figlioSinistro(p));
}
if (q != NULL && !destroVuoto(p)){ // ovviamente vale lo stesso discorso per questo 'NULL'
q = trova_nodo(a, figlioDestro(p));
}
}else
q = p;
return q; // q sarà NULL se il nodo non esiste ;)
}