Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: andie13 en 23 Septiembre 2017, 18:53 pm



Título: Cömo detener búsqueda recursiva de un elemento
Publicado por: andie13 en 23 Septiembre 2017, 18:53 pm
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!

Código
  1. void buscar(arbol A, elem dato, arbol *aux){
  2.    elem E;
  3.    if(!esVacio(A)){
  4.        info(A,&E); // Miramos el contenido del nodo y lo almacenamos en la variable auxiliar E
  5.        if(E==dato){ // Si el dato del nodo coincide con el buscado...
  6.            *aux=A;
  7.        }
  8.        else{
  9.            buscar(izq(A),dato,aux);
  10.            buscar(der(A),dato,aux);
  11.        }
  12.    }
  13. }


Título: Re: Cömo detener búsqueda recursiva de un elemento
Publicado por: AlbertoBSD en 23 Septiembre 2017, 19:08 pm
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.


Título: Re: Cömo detener búsqueda recursiva de un elemento
Publicado por: ivancea96 en 23 Septiembre 2017, 21:47 pm
Si llamas a la función con aux = NULL (o nullptr o 0), basta que llames a buscar(der()) solo si aux == 0.


Título: Re: Cömo detener búsqueda recursiva de un elemento
Publicado por: MAFUS en 24 Septiembre 2017, 04:07 am
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.