Computing Rang eines Knoten in einem binären Suchbaum
Wenn jeder Knoten in einem binären Suchbaum speichert das Gewicht (Anzahl der Knoten in seinem Teilbaum), was wäre eine effiziente Methode zur Berechnung der Rang von einem gegebenen Knoten (der index in der sortierten Liste), da ich nach für es in dem Baum?
InformationsquelleAutor dissem | 2014-09-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Starten Sie den Rang bei null. Wie die binäre Suche erlösen aus der Wurzel, fügen Sie die Größen, die für alle linken Teilbäume, dass die Suche überspringt, darunter die linken Teilbaum des Knoten gefunden.
I. e., wenn die Suche geht Links (von den Eltern auf das linke Kind), es entdeckt keine neuen Werte die kleiner als das gesuchte Element, so dass der Rang gleich bleibt. Wenn es richtig geht, der Elternteil plus alle Knoten im linken Teilbaum sind kleiner als das gesuchte Element, so fügen Sie ein plus der linke Teilbaum Größe. Wenn er findet das gesuchte Element. alle Elemente im linken Teilbaum des Knotens mit der Position weniger als er, so fügen Sie diese an den Rang.
Alles zusammen:
Dies gibt den null-basierten Rang. Wenn Sie brauchen, 1-basiert, dann initialisieren
rank
auf 1 statt 0.Ihre Lösung ist einfach und sauber. Ich habe versucht, dieses problem zu lösen, indem gleichzeitig alle Kinder zählen in jedem Knoten. Das war Komplex und anfällig für Fehler stattdessen ist es viel einfacher einfach zu pflegen von der Größe des linken teilbaums, wie Sie es Tat. Danke!
InformationsquelleAutor Gene
Da jeder Knoten hat ein Feld speichern von Gewicht, die Sie zuerst durchführen sollten, einen Aufruf der Methode size() der Rückgabewert die Anzahl der Knoten in einem Knoten ist substree:
berechnen Sie den Rang eines gegebenen Knoten ist einfach
else
ist nicht korrekt. Nur der linke Unterbaum der Wurzel enthält Elemente, die weniger als den gesuchten Wert.InformationsquelleAutor Jade Tang
Hängt von der BST-Umsetzung, aber ich glaube, Sie können es lösen rekursiv.
InformationsquelleAutor Joe Drool