Hvis man har størrelser av hver av undertrærne, kan dette være mulig uten å måtte lese data inn i en matrise (eller på annen måte å traversere treet) og å telle opp. Hvis du ikke holde størrelsen informasjon hendig, trenger du en hjelper funksjon for å beregne størrelsen.
Den grunnleggende ideen, finne ut hva som er indeksen for den aktuelle noden. Hvis det er mindre enn k, må du søke den venstre undertreet. Hvis den er større enn k, søke i rett utligne nodene regnet fra venstre og strøm. Merk at dette er egentlig det samme som å søke gjennom en vanlig BST, bortsett fra denne tiden vi søker etter indeks, ikke data. Noen pseudokode:
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
For å illustrere, vurdere dette treet med de merkede indekser (ikke engang bekymre deg om dataene som det er ikke viktig i søke):
3
/ \
2 6
/ / \
0 4 7
\ \
1 5
Anta at vi ønsker å finne den andre (k = 2).
Fra 3, størrelsen på den venstre undertreet er 3.
Det er større enn k, så bevege seg mot venstre treet.
Størrelsen på den venstre undertreet er 2.
k er også 2 slik at strømnode må være den andre.
Anta at vi ønsker å finne den fjerde (k = 4).
Fra 3, størrelsen på den venstre undertreet er 3.
Det er mindre enn l, slik justere ny k til å være 0 (k'= 4 - (3 + 1)) og bevege seg mot høyre undertreet.
Starter 6, størrelsen på den venstre undertreet er 2.
Det er større enn k'(0) så bevege seg mot venstre treet.
Størrelsen på den venstre undertreet er 0.
k' er også 0, slik at strømnode må være den fjerde.
Du får ideen.