Als u de grootte van elk van de substructuren kan dit uitvoerbaar zijn zonder de gegevens te lezen in een array (of op andere wijze de boom doorkruisen) en tellen. Als u niet de grootte informatie bij de hand weet te houden, heb je een helper functie moet de grootte te berekenen.
Het basisidee, erachter te komen wat is de index van het huidige knooppunt. Als het minder dan k is, moet je naar links substructuur doorzoeken. Als deze groter is dan k, zoeken de juiste compensatie van de knooppunten rekenen vanaf de linkerzijde en de huidige. Merk op dat dit is in wezen hetzelfde als het zoeken door middel van een regelmatige BST, behalve deze keer zijn we op zoek in de index, geen gegevens. Enkele pseudocode:
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
Om dit te illustreren, overweeg deze boom met de gemarkeerde indices (zelfs niet zorgen te maken over de gegevens zoals het is niet belangrijk in de zoektocht):
3
/ \
2 6
/ / \
0 4 7
\ \
1 5
Stel dat we willen naar de 2e (k = 2) vinden.
Vanaf 3, de grootte van de linker deelboom 3.
Het is dan k dus naar links substructuur.
De grootte van de linker deelboom 2.
k is 2, zodat de huidige knoop moet 2 zijn.
Stel dat we willen naar de 4e (k = 4) te vinden.
Vanaf 3, de grootte van de linker deelboom 3.
Het is dan l passen zodat de nieuwe k aan 0 (k'= 4 - (3 + 1)) en naar rechts deelboom.
Vanaf 6, de grootte van de linker deelboom 2.
Het is dan k (0) zodanig naar links substructuur.
De grootte van de linker deelboom 0.
k' is 0, zodat het huidige knooppunt moet 4 zijn.
Je krijgt het idee.