En estos momentos no se me ocurre como generar un laberinto, pero si se me ocurre la estructura que podria soportarlo :
struct laberinto
{
int yapase;
int salida;
struct laberinto *norte, *sur, *este, *oeste;
}
Ahora hablas de arboles binarios, y esos tiene 2 direcciones, izquierda y derecha.
Independiente de la estructura, la busqueda y/o recorrido es en forma recursiva.
Lamento no poder asistirte mas, no tengo tiempo para desarrollar el problema...