İkili arama ağacı derinliği hesaplayın?

oy
0

Ben derinliklerinde toplamını belirli bir BST için [kökün bütün çocuklar için bireysel derinliklerinde toplamını] hesaplama zorluk yaşıyorum. Ben ağaç için toplam düğüm sayısına sahip ve ben bu derinlik toplamı var gerektiren ağaç için ortalama derinliği hesaplamak çalışıyorum.

Özyineleme ve ben çok zor bu sorunu bulma yaşıyorum .. çok iyi geçiniyor değil. Mümkün olsaydı olsa özyinelemeli çözümü görmek istiyorum.

NOT:

Ben erişimcileri Node.getLeft () ve Node.getRight oluşturduk ()

Oluştur 09/12/2009 saat 21:03
kaynak kullanıcı
Diğer dillerde...                            


5 cevaplar

oy
2

Ben bir kağıt size bir BST resmini takdim olsaydı elle canonically bu tercih ediyorsa düşünün. Eğer bir düğüm at olduğunuzda, hangi bilgileri takip etmek gerekiyor? Nasıl biri belirli düğümün yüksekliği buluyor?

Buradan pseudocode içine ve hatta doğrudan Java çevirebilmektedirler deneyin. Sorun yaşıyorsanız, kullanıcılar size yardımcı olabilir böylece yorum yapmaktan çekinmeyin.

Cevap 09/12/2009 saat 21:08
kaynak kullanıcı

oy
4

Az önce ağaç travers (eğer varsa ağaç traversals bakmak) gibi bir derinlik sayacı tutmak ve tezgahın değerini bir düğüm ulaştığı zaman eklemeniz gerekir. Sonra sadece düğüm sayısına bölün.

Ben daha ayrıntılı bir çözüm sunan değilim böylece bu ödevi gibi görünüyor.

Cevap 09/12/2009 saat 21:09
kaynak kullanıcı

oy
0

Bu ödev mi? Eğer öyleyse gibi soru etiketleyin.

Bunun bir yöntemi oluşturabilirsiniz:

  • Bir düğüm referans ve bağımsız değişken olarak bir derinliğe sahiptir
  • Arttırma derinlik
  • Düğüm Bir çocuk düğüm çağrı buna göre sağ ve sol ve güncelleme toplamı için yinelemeli değilse
  • aksi takdirde bir miktar + derinliği geri

Eğer ağaçta çocuk sayısına göre bu Devide sahip olduktan sonra ortalama derinliği elde etmek.

Cevap 09/12/2009 saat 21:10
kaynak kullanıcı

oy
0

Hepimiz yaprak düğümleri ziyaret edip onların ne kadar derin olduğunu anlamaya ihtiyacımız var. Bu öneriler:

senin düğüm-ziyaret fonksiyonunu fazladan argüman verin. O gidiyor ama aynı zamanda ne kadar derin olduğunu olmayacağım sadece nereye bilmesi gerekir. denir her zaman, daha derin gitmek için üzerine denir, bu nedenle düğüm ziyaretçi sadece arayanın aldığı derinlik sayıyı artırmak zorundadır.

Şimdi 2 şeyden biri olabilir:

  • Ya buldum düğüm bir yaprak düğüm, hiç alt yoktur yani; Bu durumda, ziyaretçi arayana onun derinliğini dönmek gerekiyor. Evet, sadece o arayana + 1 aldığım sayısını döndürür.

  • ya da bir yaprak düğüm değil. Bu durumda, 1 veya 2 çocuk ya sahip olacaktır. Biz sadece çocuklar tarafından döndürülen derinliklerde toplamını döndürür, böylece geri arayana kadar bizim çocuklar gelenler derinlik raporlarını almak gerekir.

özyineleme büyü sayesinde sayı tüm çocukların derinliklerinin toplamı olacaktır root ziyaretçiye döndü.

Ortalama bir derinlik elde etmek için, yaprak düğümlerin sayısına göre bu bölmek isteyeceksiniz; hangi ı hesaplamak için ikinci geçişi için terk ediyorum. O birinde yapılabilirdi, ama biraz daha karmaşık olacaktır.

Cevap 09/12/2009 saat 21:26
kaynak kullanıcı

oy
0

Bu ödev olduğundan, ben sadece bir cevap vermek istemiyorum. Bunun yerine, burada bir tek başına bağlantılı listenin uzunluğunu hesaplamak için yinelemeli bir yoldur. Umarım bu size anlayabileceği bir şekilde özyinelemeye gösterecek ve siz BST sorunu çözmek için oradan tahmin edebilir.

public final class LL {
    public final int value;
    public LL next;

    public LL(final int value) {
        this.value = value;
    }

    public void add(final int value) {
        if (null == next) {
            next = new LL(value);
        } else {
            next.add(value);
        }
    }

    /**
     * Calculate the length of the linked list with this node as its head (includes this node in the count).
     *
     * @return the length.
     */
    public int length() {
        if (null == next) {
            return 1;
        }
        return 1 + next.length();
    }

    public static void main(final String... args) {
        final LL head = new LL(1);
        head.add(2);
        head.add(3);
        System.out.println(head.length());
        System.out.println(head.next.length());
    }
}
Cevap 09/12/2009 saat 21:57
kaynak kullanıcı

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