User Tag List

Resultados 1 al 3 de 3

Tema: buscar nodo en un arbol

  1. #1

    buscar nodo en un arbol

    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.

    Código:
    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

  2. #2
    Es porque estas retornando en:

    Código:
    if(this->hermano!=NULL)
           return this->hermano->buscar(ch);
    Ahí tendrías que guardar le valor en una variable, no retornar.

    Algo como:

    Código:
    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.

  3. #3
    bieeen loco!! anduvo bien, habrá que agarrarle la mano mas a la recursividad.

    Muchas Gracias

Información de tema

Usuarios viendo este tema

Actualmente hay 1 usuarios viendo este tema. (0 miembros y 1 visitantes)

Temas similares

  1. Comenzando a buscar mi primer auto
    Por Guarana Fest en el foro Offtopic
    Respuestas: 21
    Último mensaje: 29-05-2015, 11:32 AM
  2. Respuestas: 3
    Último mensaje: 22-10-2014, 11:55 AM
  3. Cortando un arbol when...
    Por fedespot en el foro Offtopic
    Respuestas: 3
    Último mensaje: 23-04-2014, 03:11 PM
  4. Buscar tus posts
    Por Stuntman Mike en el foro Work in Progress
    Respuestas: 1
    Último mensaje: 22-08-2013, 11:47 PM

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •