Avec un simple BST où l'ordre d'insertion des éléments dans un ordre aléatoire, vous avez moyen de déterminer exactement combien d'éléments sont plus petits qu'un élément donné sans marcher l'arbre.
Si vous aviez un arbre équilibré, comme un arbre rouge-noir, alors vous pourriez au moins mettre une borne inférieure et supérieure de l'indice en raison des limites sur la hauteur de l'arbre. Si l'ordre d'insertion d'éléments à un BST est non-aléatoire là encore, vous pourriez dire quelque chose sur la hauteur des arbres sans elle marche et donner une estimation de l'indice approximatif.
En ce qui concerne les structures de données auxiliaires, vous pouvez créer un dictionnaire auxiliaire qui associe des éléments à leur index. Cependant, la construction de cet indice prend O (N) et l'indice devient obsolète lorsque vous ajoutez de nouveaux éléments à la BST, donc cela ne fonctionne bien pour BSTS des mises à jour peu fréquentes.
Une autre solution consiste à étendre les noeuds de BST avec deux propriétés: index et compter. L'indice dit combien plus petits éléments que celui de ce nœud sont dans l'arbre. Le comte dit combien les éléments étaient dans la BST quand dernière mise à jour l'index de ce nœud. Avec des changements relativement simples à l'insertion, la suppression et la recherche sur la BST, qui ne touchent pas les opérations de base au-delà d'une constante de temps, et peut obtenir l'indice de l'élément directement dans O (1).
Essentiellement, lorsque vous insérez un nouveau nœud, pour chaque nœud que vous passez sur votre chemin vers le bas, si le nouvel élément est plus petit (à savoir l'étape suivante consiste à l'enfant à gauche), incrémenter les deux index et le nombre de ce noeud. Lorsque vous trouvez la nouvelle place de l'élément, vous lui donnez un compte en fonction de sa mère, et un indice en fonction de son parent et l'enfant gauche. Cela laisse les éléments plus grands que la nouvelle avec un mauvais index, mais vous pouvez facilement mettre à jour que vous effectuez une recherche pour un élément en se référant à la valeur de comptage du parent - la différence entre le nombre des parents et l'enfant vous indique comment de nombreuses insertions d'éléments plus petits se sont produits depuis dernière mise à jour l'indice de l'enfant, de sorte que vous ajoutez simplement cette différence à l'indice.