İKİLİ DEĞİLDİR bir Ağacında aranıyor

oy
0

Hey çocuklar, bir ikili ağaç olmayan bir ağaç yarattık. Şimdi, istediğim bir unsuru aramak içindir. Önemli olan şudur: Ben bir ikili ağacın aksine hiçbir karşılaştırma şansı beri, kod uygulamak için başka yollar bulmak zorundayız. İşte ne düşündüğümü:

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

Tabii ki, bu kod işe yaramadı. zor kısmı Ben en kısa bulmak gibi ben arıyorum değer döndürmek için olması. Bunu bulamazsanız Ancak, ben hala bir şey dönmek zorunda. Bunu nasıl yapacağım ???

Oluştur 25/05/2011 saat 15:03
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
0

Başlamak için, (her nasılsa) için özyinelemeli çağrılar tarafından döndürülen değeri kullanmak gerekir search()- muhtemelen returnbunu:

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;
}
Cevap 25/05/2011 saat 15:07
kaynak kullanıcı

oy
0

Aradığınız özyinelemeli fonksiyon için metacode

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;
}
Cevap 25/05/2011 saat 15:15
kaynak kullanıcı

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