Cömo detener búsqueda recursiva de un elemento

Iniciado por andie13, 23 Septiembre 2017, 18:53 PM

0 Miembros y 1 Visitante están viendo este tema.

andie13

Hola a todxs,
debo realizar un ejercicio para clase y hay una cosa que no tengo clara: pide explícitamente utilizar esta función void buscar(arbol A, elem dato, arbol *aux); para buscar un elemento de un árbol de letras (que no están ordenadas). El primer parámetro es el árbol dónde queremos buscar, el segundo el dato que se busca y el tercero un puntero que apunte a la posición del árbol donde se encuentra ese elemento.

Ahora bien, la función realiza su trabajo, pero quería saber si existe algún modo de detener la búsqueda cuando se haya encontrado el elemento y de que te avise si no lo ha encontrado. Al ser recursiva y de tipo void, no tengo claro como sería el procedimiento. Os dejo aquí mi función por si a alguien se le ocurre algo.

¡Muchas gracias, compañeros!

void buscar(arbol A, elem dato, arbol *aux){
   elem E;
   if(!esVacio(A)){
       info(A,&E); // Miramos el contenido del nodo y lo almacenamos en la variable auxiliar E
       if(E==dato){ // Si el dato del nodo coincide con el buscado...
           *aux=A;
       }
       else{
           buscar(izq(A),dato,aux);
           buscar(der(A),dato,aux);
       }
   }
}

AlbertoBSD

Al ser void y no poder devolver ningun dato, lo unico que queda es establecer unas variables global que indique si ya se encontro y su ubicacion en el arbol, asi mismo la función recursiva podria validar esa variable antes de continuar.
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

ivancea96

Si llamas a la función con aux = NULL (o nullptr o 0), basta que llames a buscar(der()) solo si aux == 0.

MAFUS

Lo principal es parar la búsqueda cuándo ya no quede más árbol, por tanto deberás parar la búsqueda por una rama cuándo la hoja sea NULL. Lo mismo con la otra.
Si encuentras el elemento, lo cargas en aux y regresas de la función (¿te suena?) Si por las dos ramas has llegado a NULL simplemente regresas dejando aux como NULL (la clave está en inicializar bien), que querrá decir que no se ha encontrado nada.