Beregn dybden av et binært søketre?

stemmer
0

Jeg har problemer med å beregne summen av dybder [summen av de enkelte dybder for alle barn i roten] for en gitt BST. Jeg har det totale antallet noder for treet, og jeg prøver å beregne den gjennomsnittlige dybden for treet, som krever jeg har denne dybde sum.

Rekursjon og jeg ikke komme veldig bra .. Jeg finner dette problemet svært vanskelig. Jeg vil gjerne se en rekursiv løsning skjønt, hvis mulig.

MERK:

Jeg har laget accessors Node.getLeft () og Node.getRight ()

Publisert på 09/12/2009 klokken 20:03
kilden bruker
På andre språk...                            


5 svar

stemmer
2

Tenk på hvordan du vil gå om dette kanonisk hånd hvis jeg hadde presentert et bilde av en BST til deg på et ark. Når du er på en node, hvilken informasjon trenger du for å holde styr på? Hvordan finner man høyden på en gitt node?

Herfra prøve å oversette dette til pseudokode eller rett inn i Java. Hvis du har problemer, gjerne kommentere slik at brukerne kan hjelpe deg.

Svarte 09/12/2009 kl. 20:08
kilden bruker

stemmer
4

Du trenger bare å holde en dybde telleren som du traversere treet (se opp tre gjennomløping hvis du må) og legge verdien av disken hver gang du kommer til en node. Deretter deles med antall noder.

Dette ser ut som lekser så jeg ikke gir en mer detaljert løsning.

Svarte 09/12/2009 kl. 20:09
kilden bruker

stemmer
0

Er dette lekser? I så fall merke spørsmålet som sådan.

Du kan lage en metode som:

  • har en node referanse og en dybde som argumenter
  • inkrement dybden
  • hvis noden er ikke et barn node samtale rekursivt for venstre og høyre og oppdatering sum tilsvar
  • ellers går tilbake sum + dybde

Når du har denne devide med antall barn i treet for å få den gjennomsnittlige dybden.

Svarte 09/12/2009 kl. 20:10
kilden bruker

stemmer
0

Vi trenger å besøke alle bladnoder og finne ut hvor dypt de er. Dette tyder på:

Gi node-besøk funksjonen et ekstra argument. Den trenger å vite ikke bare hvor det kommer, men også hvor dypt det er. Hver gang det heter, det heter på å gå dypere, slik at node besøkende har bare å øke dybden nummeret det fikk fra den som ringer.

Nå er en av 2 ting kan skje:

  • Enten noden du funnet er en bladnode, dvs. det ikke har noen barn; i dette tilfellet, må de besøkende til å returnere sin dybde til den som ringer. Ja, det bare returnerer antall det fikk fra den som ringer, + 1.

  • eller det ikke er en bladnode. I så fall vil det ha enten 1 eller 2 barn. Vi trenger å få disse detaljerte rapporter fra våre barn tilbake til den som ringer, så bare returnere summen av dypet returneres av barna.

Ved den magiske rekursjon, returneres nummeret til root sin besøkende vil være summen av dypet av alle barn.

For å få en gjennomsnittlig dybde, vil du ønsker å dele dette med antall bladnoder; som jeg vil overlate til en annen traversering å beregne. Det kan gjøres på en, men det ville være litt mer komplisert.

Svarte 09/12/2009 kl. 20:26
kilden bruker

stemmer
0

Siden dette er lekser, jeg ønsker ikke å bare gi deg et svar. I stedet, her er en rekursiv måte å beregne lengden på en enkeltvis lenket liste. Forhåpentligvis vil dette vise rekursjon på en måte du kan forstå, og du kan ekstrapolere fra det å løse BST problem.

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());
    }
}
Svarte 09/12/2009 kl. 20:57
kilden bruker

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