Căutarea într-un copac care nu este BINARY

voturi
0

Hei baieti, am creat un copac, care nu este un arbore binar. Acum, ceea ce vreau este de a căuta un element. Principalul lucru este următorul: Din moment ce nu am nici o șansă comparație, în contrast cu un arbore binar, am să găsească alte modalități de a pune în aplicare codul. Iată ce m-am gândit:

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

Desigur, acest cod nu a funcționat. Partea dificilă este că trebuie să se întoarcă valoarea pe care îl caut imediat ce am găsit. Cu toate acestea, dacă nu-l pot găsi, eu încă mai trebuie să se întoarcă ceva. Cum am de gând să fac asta ???

Întrebat 25/05/2011 la 15:03
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
0

Pentru a începe, trebuie să (cumva) utilizează valoarea returnată de apeluri recursive la search()- probabil returncă:

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;
}
Publicat 25/05/2011 la 15:07
sursa de către utilizator

voturi
0

metacode pentru funcția recursiv pe care il cautati

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;
}
Publicat 25/05/2011 la 15:15
sursa de către utilizator

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