La búsqueda en un árbol que no es binario

votos
0

Hola chicos, he creado un árbol que no es un árbol binario. Ahora, lo que quiero es la búsqueda de un elemento. Lo principal es la siguiente: Como no tengo ninguna posibilidad de comparación en contraste con un árbol binario, tengo que encontrar otras maneras de implementar el código. Aquí lo que pensaba:

public TreeNode<City> search(City parent, TreeNode<City> t){
//As you guess, City class is irrelevant to the issue, I have no problem with City class.
    if (t.getCity().equals(parent)) {
        return t;
    }
    else if (t.hasLeftChild()){
        search(parent,t.getLeftChild());
    }
    else if(t.hasNextSibling()){
        search(parent,t.getNextSibling());
    }
    else//Since I know that case will never happen, the returned value is unimportant
        return t;
    }

Por supuesto, ese código no funcionaba. La parte difícil es que tengo para devolver el valor Estoy buscando tan pronto como lo encuentre. Sin embargo, Si no puedo encontrarlo, todavía tengo que devolver algo. ¿Cómo voy a hacer eso ???

Publicado el 25/05/2011 a las 15:03
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
0

Para empezar, es necesario (de alguna manera) utiliza el valor devuelto por las llamadas recursivas a search()- probablemente returnes:

public TreeNode<City> search(City parent, TreeNode<City> t){
    if (t.getCity().equals(parent)) {
        return t;
    }
    else if (t.hasLeftChild()){
        return search(parent,t.getLeftChild());
    }
    else if(t.hasNextSibling()){
        return search(parent,t.getNextSibling());
    }
    return null;
}
Respondida el 25/05/2011 a las 15:07
fuente por usuario

votos
0

metacódigo para la función recursiva que busca

public TreeNode<City> search(City parent, TreeNode<City> t){
    if (t.getCity().equals(parent)) {
        return t;
    }

    if (t.hasLeftChild()) {
        if (tmp = search(parent,t.getLeftChild())) {
            return tmp;            
        }
    }

    if (t.hasnextSibling()) {
        if (tmp = search(parent,t.getnextSibling())) {
            return tmp;            
        }
    }

    return false;
}
Respondida el 25/05/2011 a las 15:15
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more