Szukając w drzewo, które nie jest binarny

głosy
0

Hej chłopaki, ja stworzyliśmy drzewo, które nie jest binarne drzewo. Teraz to, co chcę jest poszukiwanie elementu. Najważniejsze jest to, co następuje: Ponieważ nie mam porównania szansę w przeciwieństwie do binarnego drzewa, muszę znaleźć jakieś inne sposoby wykonania kodu. Oto, co myślę:

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

Oczywiście, że kod nie działa. Trudna jest to, że muszę jak najszybciej znajdę go zwrócić wartość szukam. Jednak, jeśli nie mogę go znaleźć, mam jeszcze coś do powrotu. Jak mam to zrobić ???

Utwórz 25/05/2011 o 15:03
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
0

Aby rozpocząć, trzeba (jakoś) użyj wartości zwracanej przez rekurencyjnych wywołań search()- prawdopodobnie returngo:

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;
}
Odpowiedział 25/05/2011 o 15:07
źródło użytkownik

głosy
0

metacode dla funkcji rekurencyjnej szukasz

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;
}
Odpowiedział 25/05/2011 o 15:15
źródło użytkownik

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