PDA

Ver la versión completa : buscar nodo en un arbol



carp
26-06-2014, 12:20 PM
buenas gente, tengo un problema y no lo he podido solucionar, quizas pueden ver el error que yo lo no veo.
tengo una clase nodo que tiene el hermano, el hijo y una funcion buscar, el tema es que retorna NULL antes de terminar de recorrer todo el árbol.


void NodoArbol:: buscar(char *ch){
if(this->elem)
{
Recurso *r=dynamic_cast<Recurso*>(this->elem);
//cout<<"\nva a comprar: "<<ch<<" con "<<r->getUbicacion();
if(strcmp(ch,r->getUbicacion())==0)
{
return this;
}

}
}
if(this->hermano!=NULL)
return this->hermano->buscar(ch);

if(this->hijo!=NULL)
return this->hijo->buscar(ch);
return NULL; //retorna null en caso de que no encuentre


me doy cuenta que nunca llega a comparar porque en la linea que está comentada actualmente, no me muestra el recurso que deberia comparar.

tengo la carpeta raiz ya por defecto.
ingreso: /carpeta
/carpeta2
luego dentro carpeta, /carpeta/carpeta1

por lo que al mostrar los recursos que están en el arbol me muestra:
/
/carpeta
/carpeta/carpeta1
/carpeta2

OSEA que ingresar lo ingresa correctamente, pero al agregar un recurso dentro de /carpeta/carpeta1 , no lo encuentra (al nodo que tiene ese recurso) porque retorna NULL antes.

agradezco la ayuda que me puedan dar

Matungos
26-06-2014, 12:45 PM
Es porque estas retornando en:


if(this->hermano!=NULL)
return this->hermano->buscar(ch);

Ahí tendrías que guardar le valor en una variable, no retornar.

Algo como:


if (this->hermano != NULL) {
NodoArbol enHermano = this->hermano->buscar(ch);
if (enHermano != NULL) return enHermano; // solo retorno en caso de haber encontrado
}
if (this->hijo != NULL) {
NodoArbol enHijo = this->hijo->buscar(ch);
if (enHijo != NULL) return enHijo; // solo retorno en caso de haber encontrado
}

return NULL;

No me acuerdo si podías definir y usar la misma clase en C++, que parece ser el lenguaje que estas usando, pero la idea sería esa igual.

carp
26-06-2014, 01:00 PM
bieeen loco!! anduvo bien, habrá que agarrarle la mano mas a la recursividad.

Muchas Gracias