Vyhledávání v stromě, který není BINARY

hlasů
0

Ahoj kluci, jsem vytvořil strom, který není binární strom. A teď, co chci, je pro vyhledání prvku. Hlavní věc je následující: Protože nemám srovnání šanci na rozdíl od binárního stromu, musím najít nějaké jiné způsoby, jak implementovat kód. Tady to, co jsem si myslel:

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;
    }

Samozřejmě, že kód nefungoval. Nejtěžší je, že jsem se hned, jak jsem ho najít vrátí hodnotu jsem hledáním. Přesto Mohu-li to nenajde, ještě musím něco vracet. Jak to mám udělat ???

Položena 25/05/2011 v 15:03
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
0

Chcete-li začít, je třeba (nějak) použít hodnotu vrácenou rekurzivních volání search()- zřejmě returnto:

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;
}
Odpovězeno 25/05/2011 v 15:07
zdroj uživatelem

hlasů
0

Metacode pro rekurzivní funkce, kterou hledáte

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;
}
Odpovězeno 25/05/2011 v 15:15
zdroj uživatelem

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