Yinelemeli bir ikili Ağacı üzerinde ara

oy
0

Herkes onun doğru veya incorrect.i bugünlerde özyinelemeye okuyorum varsa bana Bu kod parçasını izlemek için yardımcı olabilir.

boolean search(Element element) {
    Element c=first;
    if(c==null)
        return false;
    else if(element.asset < c.asset)
        if(c.left==null)
            return false;
        else
            return search(c.left);
    else if(element.data>c.data)
        if(c.right==null)
            return false;
        else
            return search(c.right);
     else  
         return element.asset==c.asset;
}
Oluştur 07/08/2011 saat 13:44
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
3

o durumu durdurmak yoksundur. eğer t.left == null adlı kontrol etmelidir, yoksa NullPointerException alacak. Ayrıca, sen dönmelidir t.left.isExist(..)VEYA t.right.isExist(...)olup isExist [sen oğul bu yöntemi çağırmak isteyecektir]

Şu anda, bu versiyon sonsuz döngüye alacak - Hep aynı kök düğümünde kontrol edecektir çünkü.

Cevap 07/08/2011 saat 13:47
kaynak kullanıcı

oy
1

Kodunuz simetrik değildir.

bir tarafı için, aramak isExist(t.left)çağrı diğeri için,isExist(a.right)

Muhtemelen aramak istediğiniz t.left.isExist(a)ve t.right.isExist(a)ancak tam bir yok olarak bu spekülatiftir SSCCE bize bakmak için.

Cevap 07/08/2011 saat 13:52
kaynak kullanıcı

oy
0

Bu Java sözdizimsel doğrudur. Ama belki sen niyetinde yapıyor olabilir nasıl görmüyorum.

'Eleman' parametresi aradığınız şey ve mevcut sınıfında 'ilk' alanı ikili ağacın kökü olduğu anlaşılmaktadır.

(Eleman sınıfında) ikili ağacı ve arama için anahtar 'varlık' veya 'veri' olup olmadığı belirsiz. 'Den daha az' test 'den daha büyük' test kullanır 'veriler' ise, 'aktif' kullanır. Her iki hat aynı alanı kullanması gerektiğini muhtemel görünüyor. Bu iki alan ( 'varlık' veya 'veri') biri gerektiğini olabilir değil tüm bu yöntemde başvurulan. Belki yöntemin son satırı sadece 'return true;' olmalıdır?

(I "durdurma koşulu" şüpheli ve cevapları yukarıdaki hem yanlıştır "kod simetrik değildir" Ama yanlış olabilir. Verilen tek kodla söylemek zor.)

Sonsuz döngü muhtemeldir kabul ediyorum: İkinizin 'Elemanı' parametrelerini kabul eden bir ikinci 'ara' işlev oluşturmanız gerekir şüpheli - Bir aramak için bir şey olma (şimdiki 'eleman' parametresi gibi) ve diğer varlık arama sonraki Eleman - geçerli yerel değişken 'c' eşdeğer. Ben ilk satır hariç cari 'ara' yönteminin gövdesinde her konuda "Yöntem Özü" üstlenmeden yapmak ve sonra yeni yöntemi kullanmak için iki tekrarlanan aramalara değiştirecektir.

(Bunlardan bazıları Yani, tabii ki, oldukça yanlış olabilir. Bana sınırlı bilgi verilmiş, istediğiniz ya niyetinde ne olduğunu tahmin dayanarak, spekülatiftir.)

Cevap 09/08/2011 saat 03:11
kaynak kullanıcı

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