Dacă aveți dimensiunile fiecăruia dintre subramificații, acest lucru poate fi greu de realizat fără a fi nevoie să citească datele într-o matrice (sau altfel traversează copac) și incrementală. Dacă nu păstrați informațiile de mărime la îndemână, veți avea nevoie de o funcție de ajutor pentru a calcula dimensiunea.
Ideea de bază, dau seama ce este indicele nodului curent. Dacă este mai mică decât k, aveți nevoie pentru a căuta în subarborele din stânga. În cazul în care este mai mare decât k, căutare dreptul de compensare nodurile numărate de la stânga și curent. Rețineți că acest lucru este în esență aceeași ca și căutarea prin intermediul unui BST regulat, cu excepția cazului de data aceasta suntem în căutarea de index, nu date. Unele pseudocod:
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
Pentru a ilustra, ia în considerare acest arbore cu indicii marcate (chiar nu vă faceți griji cu privire la datele deoarece nu este important în căutare):
3
/ \
2 6
/ / \
0 4 7
\ \
1 5
Să presupunem că vrem să găsim de 2 (k = 2).
Începând de la 3, dimensiunea subarborelui din stânga este 3.
Acesta este mai mare decât k astfel încât trece la subarborele stâng.
Dimensiunea subarbore stâng este 2.
k este , de asemenea , 2 , astfel nodul curent trebuie să fie de 2.
Să presupunem că vrem să găsim de 4 (k = 4).
Începând de la 3, dimensiunea subarborelui din stânga este 3.
Este mai mică decât l ajustați astfel încât noul k să fie 0 (k“= 4 - (3 + 1)) și a trece la subarborelui drept.
Începând de la 6, dimensiunea subarborelui din stânga este 2.
Este mai mare decât k“(0) , astfel încât trece la subarborele stâng.
Dimensiunea subarbore stâng este 0.
k“este , de asemenea , 0 , astfel încât nodul curent trebuie să fie al 4 - lea.
Ai idee.