Con un simple BST donde el orden de inserción de elementos de azar, que tiene forma de determinar exactamente cuántos elementos son más pequeños que un elemento dado, sin recorrer el árbol.
Si usted tenía un árbol equilibrado, como un árbol rojo-negro, a continuación, al menos podría poner un límite inferior y superior en el índice debido a los límites en la altura del árbol. Si el orden de inserción de elementos a un BST no es aleatoria, de nuevo, se podría decir algo sobre la altura de los árboles sin caminar y darle una estimación del índice aproximado.
En cuanto a las estructuras de datos auxiliares, se puede crear un diccionario auxiliar que mapea los elementos a su índice. Sin embargo, la construcción de este índice toma O (N) y el índice se vuelve rancio cuando se agrega nuevos elementos al BST, por lo que esto sólo funciona bien para BSTs con actualizaciones frecuentes.
Otra solución es extender los nodos BST con dos propiedades: índice y contar. El índice dice cuántos elementos más pequeños que el de este nodo están en el árbol. El recuento dice cuántos elementos se encontraban en el BST la última actualización del índice de ese nodo. Con cambios relativamente simples a la inserción, supresión y buscar en el BST, que no afectan a las operaciones básicas más allá de un tiempo constante, y se puede obtener el índice del elemento directamente en O (1).
Esencialmente, a medida que inserta un nuevo nodo, para cada nodo que pase en su camino hacia abajo, si el nuevo elemento es menor (es decir, el paso siguiente es el hijo izquierdo), incrementar tanto el índice y el recuento de ese nodo. Cuando encuentre el lugar del nuevo elemento, que le dan un recuento basado en su matriz, y un índice sobre la base de su padre y el hijo izquierdo. Esto deja a los elementos más grande que el nuevo con un índice incorrecto, pero se puede actualizar fácilmente que a medida que la búsqueda de un elemento haciendo referencia al valor de cuenta del padre - la diferencia entre el recuento de los padres y el niño le dice cómo muchas inserciones de elementos más pequeños pasaron desde la última actualización de índice del niño, por lo que sólo tiene que añadir que la diferencia en el índice.