Si usted tiene los tamaños de cada una de las sub-estructuras, esto puede ser factible sin tener que leer los datos en una matriz (o de lo contrario recorrer el árbol) y contando. Si usted no mantiene la información de tamaño manejable, tendrá una función de ayuda para calcular el tamaño.
La idea básica, averiguar cuál es el índice del nodo actual. Si es menor que k, es necesario buscar el subárbol izquierdo. Si es mayor que k, buscar el derecho de compensar los nodos contados desde la izquierda y actual. Tenga en cuenta que esto es esencialmente lo mismo que buscar a través de una BST regular, excepto que esta vez estamos buscando por el índice, no datos. Algunos pseudocódigo:
if size of left subtree is equal to k:
// the current node is kth
return data of current node
else if size of left subtree is greater than k:
// the kth node is on the left
repeat on the left subtree
else if size of left subtree is less than k:
// the kth node is on the right
reduce k by the size of the left subtree + 1 // need to find the (k')th node on the right subtree
repeat on the right subtree
Como ejemplo, consideremos este árbol con los índices marcados (ni siquiera preocuparse de los datos ya que no es importante en la búsqueda):
3
/ \
2 6
/ / \
0 4 7
\ \
1 5
Supongamos que queremos encontrar el segundo (k = 2).
A partir de 3, el tamaño del subárbol izquierdo es 3.
Es mayor que k así pasar a la subárbol izquierdo.
El tamaño del subárbol izquierdo es 2.
k es también 2 por lo que el nodo actual debe ser el segundo.
Supongamos que queremos encontrar el cuarto (k = 4).
A partir de 3, el tamaño del subárbol izquierdo es 3.
Es menos de l así ajustar el nuevo k ser 0 (k'= 4 - (3 + 1)) y pasar a la subárbol derecho.
A partir de 6, el tamaño del subárbol izquierdo es 2.
Es mayor que k'(0) para moverse a la subárbol izquierdo.
El tamaño del subárbol izquierdo es 0.
k' también es 0 por lo que el nodo actual debe ser la cuarta.
Se entiende la idea.