L'algoritmo è corretto e di fatto è una visita pre-order dell'albero binario alla ricerca del dato (qui trovi un applet java che descrive i tre tipi di visita degli alberi binari).

In realtà c'è un errore... nelle chiamate ricorsive alla funzione trova() viene specificato solo il primo argomento e non il secondo (il dato) quindi è da riscrivere così:

codice:
tree trova (tree t, Tipo d) {
  tree temp;

  if (t == NULL || t->dato == d) {
    return t;
  }

  temp = trova(t->left, d);

  if (temp == NULL) {
    return trova(t->right, d);
  } else {
    return temp;
  }
}
Comunque la prossima volta specifica il linguaggio nel titolo del topic, oltre ad indentare il codice come ti diceva Alex.