Mit einem einfachen BST, wo die Reihenfolge der Einführung von Elementen in einem zufälligen, haben Sie Art und Weise zu bestimmen, wie viele Elemente genau sind kleiner als ein bestimmtes Element, ohne den Baum zu Fuß.
Wenn Sie einen ausgeglichenen Baum, wie ein Rot-Schwarz-Baum hatten, dann könnte man zumindest legt eine untere und obere Schranke für den Index aufgrund der Grenzen auf der Höhe des Baumes. Wenn die Reihenfolge der Einführung von Elementen zu einem BST nicht zufällig dann wieder, könnte man etwas über die Baumhöhe sagen, ohne es zu Fuß und einige Schätzung des ungefähren Index geben.
Wie für Hilfsdatenstrukturen, könnten Sie ein Hilfs Wörterbuch erstellen, die Elemente zu ihrem Index abbildet. Doch dieser Index Aufbau nimmt O (N) und der Index ist veraltet, wenn Sie neue Elemente in den BST hinzufügen, so dass dies funktioniert nur gut für BSTs mit seltenem Updates.
Eine andere Lösung ist es, die BST-Knoten mit zwei Eigenschaften zu erweitern: Index und zählen. Der Index gibt an, wie viele Elemente kleiner als die in diesem Knoten im Baum sind. Die Zahl gibt an, wie viele Elemente in der BST waren, als Sie das letzte Mal dieses Knotens Index aktualisiert. Mit relativ einfachen Änderungen an Einfügen, Löschen und suchen auf dem BST, das nicht diese grundlegenden Operationen über eine konstante Zeit beeinflussen, und kann der Index des Elements direkt in O erhalten (1).
Im Wesentlichen, wie Sie einen neuen Knoten einzufügen, für jeden Knoten auf dem Weg passieren nach unten, wenn das neue Element kleiner ist (dh der nächste Schritt nach links Kind ist), erhöhen sowohl Index und Zählung dieses Knotens. Wenn Sie das neue Element Platz finden, geben Sie es eine Zählung seiner Mutter basiert, und einen Index auf der Basis seiner Eltern und linken Kind. Dies lässt die Elemente größer ist als die neue mit einem falschen Index, aber man konnte leicht, dass aktualisieren, wie Sie durch Bezugnahme auf den Zählwert des Mutter für ein Element suchen - die Differenz zwischen der Zählung der Eltern und das Kind sagt Ihnen, wie viele Einfügungen kleinerer Elemente passiert seit dem letzten des Kindes Index aktualisiert, so dass Sie einfach diesen Unterschied zum Index hinzufügen.