Berechnen Sie die Tiefe eines binären Suchbaum?

stimmen
0

Ich habe Schwierigkeiten, die Summe der Tiefen [die Summe der einzelnen Tiefen für alle Kinder der Wurzel] für ein bestimmtes BST zu berechnen. Ich habe die Gesamtzahl der Knoten für den Baum, und ich versuche, die durchschnittliche Tiefe für den Baum zu berechnen, erfordert ich diese Tiefe Summe haben.

Rekursion und ich habe nicht sehr gut zusammen .. Ich finde dieses Problem sehr schwierig. Ich möchte jedoch eine rekursive Lösung, um zu sehen, wenn möglich.

HINWEIS:

Ich habe erstellt Accessoren Node.getLeft () und Node.getRight ()

Veröffentlicht am 09/12/2009 um 21:03
quelle vom benutzer
In anderen Sprachen...                            


5 antworten

stimmen
2

Überlegen Sie, wie Sie diese kanonisch von Hand gehen würde, wenn ich ein Bild von einem BST Sie auf einem Blatt Papier vorgestellt hatte. Wenn Sie an einem Knoten sind, welche Informationen benötigen Sie den Überblick behalten? Wie kann man die Höhe eines bestimmten Knoten finden?

Von hier aus, versuchen Sie dies in Pseudo-Code zu übersetzen, oder auch direkt in Java. Wenn Sie Probleme haben, fühlen Sie sich frei zu äußern, so kann der Anwender Ihnen helfen.

Beantwortet am 09/12/2009 um 21:08
quelle vom benutzer

stimmen
4

Sie brauchen nur einen Tiefenzähler zu halten, wie Sie den Baum durchqueren (aufblicken Traversierung, wenn Sie zu haben) und geben Sie den Wert des Zählers jedes Mal, wenn Sie einen Knoten erreichen. Dann teilen Sie nur durch die Anzahl der Knoten.

Das sieht aus wie Hausaufgaben so dass ich nicht eine detailliertere Lösung.

Beantwortet am 09/12/2009 um 21:09
quelle vom benutzer

stimmen
0

Ist das Hausaufgaben? Wenn markiert, so die Frage als solche.

Sie könnten eine Methode erstellen, die:

  • hat eine Knotenreferenz und eine Tiefe als Argument
  • Inkrements Tiefe
  • wenn der Knoten ist kein Kind Knoten Aufruf rekursiv nach links und rechts und Aktualisierung Summe entsprechend
  • Rückkehr sonst Summe + Tiefe

Sobald Sie diese Devide durch die Anzahl der Kinder im Baum haben die durchschnittliche Tiefe zu erhalten.

Beantwortet am 09/12/2009 um 21:10
quelle vom benutzer

stimmen
0

Wir müssen alle Blattknoten besuchen und herauszufinden, wie tief sie sind. Das deutet an:

Geben Sie Ihre Knoten-Besuch Funktion ein zusätzliches Argument. Es muss wissen nicht nur, wo es geht, sondern auch, wie tief es ist. Jedes Mal, es heißt, es heißt auf tiefer zu gehen, so dass Ihre Knoten Besucher haben nur die Tiefe Nummer sie vom Anrufer bekamen zu erhöhen.

Jetzt ist einer von zwei Dinge können passieren:

  • Entweder ist der Knoten, den Sie fanden ein Blattknoten ist, dh es keine Kinder hat; in diesem Fall muss Ihre Besucher ihre Tiefe an den Anrufer zurück. Ja, es gibt nur die Nummer aus dem Anrufer bekam, + 1.

  • oder es ist kein Blattknoten. In diesem Fall wird es entweder 1 oder 2 Kinder hat. Wir brauchen diese Tiefen Berichte unserer Kinder bis zum Anrufer zurück zu bekommen, so Rückkehr nur die Summe der von den Kindern zurück Tiefen.

Durch die Magie der Rekursion, kehrte die Zahl der Besucher der Wurzel wird die Summe der Tiefen aller Kinder sein.

Um eine durchschnittliche Tiefe zu erhalten, sollten Sie diese durch die Anzahl der Blattknoten teilen; die ich zu einem zweiten Traversal verlassen würde zu berechnen. Es könnte in einem getan werden, aber es wäre ein wenig komplizierter.

Beantwortet am 09/12/2009 um 21:26
quelle vom benutzer

stimmen
0

Da diese Hausaufgaben sind, will ich nicht nur Ihnen eine Antwort geben. Stattdessen ist hier eine rekursive Art und Weise die Länge einer einfach verketteten Liste zu berechnen. Hoffentlich wird diese Rekursion in einer Art und Weise zeigen Sie verstehen können, und Sie können von dort extrapolieren zu Ihrem BST Problem zu lösen.

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());
    }
}
Beantwortet am 09/12/2009 um 21:57
quelle vom benutzer

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