Zoeken in een boom die is niet BINARY

stemmen
0

Hey guys, ik heb een boom die geen binaire boom gemaakt. Nu, wat ik wil is om te zoeken naar een element. Het belangrijkste ding is het volgende: Aangezien ik heb geen vergelijking kans in tegenstelling tot een binaire boom, ik moet een aantal andere manieren om de code uit te voeren vinden. Hier wat ik dacht:

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

Natuurlijk heeft deze code niet. Het moeilijke deel is dat ik de waarde Ik ben op zoek naar terug te keren zodra ik vind het. Toch, als ik het niet kan vinden, moet ik nog iets terug te keren. Hoe ga ik om dat te doen ???

De vraag is gesteld op 25/05/2011 om 15:03
bron van user
In andere talen...                            


2 antwoorden

stemmen
0

Om te beginnen, moet u (een of andere manier) gebruik maken van de waarde die door de recursieve oproepen naar search()- waarschijnlijk returnis:

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;
}
antwoordde op 25/05/2011 om 15:07
bron van user

stemmen
0

metacode voor de recursieve functie die u zoekt

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;
}
antwoordde op 25/05/2011 om 15:15
bron van user

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