Suchen in einem Baum, der nicht BINARY

stimmen
0

Hey Leute, ich habe einen Baum erstellt, die keine binären Baum ist. Nun, was ich will, ist für ein Element zu suchen. Die Hauptsache ist folgende: Da ich keinen Vergleich Chance im Gegensatz zu einem binären Baum, ich habe einige anderen Wege finden, um den Code zu implementieren. Hier ist, was ich dachte:

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

Natürlich hat, dass Code nicht funktionieren. Der schwierige Teil ist, dass ich den Wert zurückzukehren habe ich für so bald bin auf der Suche, wie ich es finde. Und doch: Wenn ich es nicht finden kann, muss ich noch etwas zurück. Wie soll ich das tun ???

Veröffentlicht am 25/05/2011 um 15:03
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
0

Um zu starten, müssen Sie (irgendwie) , die von den rekursiven Aufrufen zurückgegeben den Wert verwenden search()- wahrscheinlich 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;
}
Beantwortet am 25/05/2011 um 15:07
quelle vom benutzer

stimmen
0

Metacodes für die rekursive Funktion, die Sie suchen

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;
}
Beantwortet am 25/05/2011 um 15:15
quelle vom benutzer

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