Αν έχετε τα μεγέθη του καθενός από τα υποδένδρων, αυτό μπορεί να είναι εφικτό χωρίς να χρειάζεται να διαβάσει τα δεδομένα σε έναν πίνακα (ή αλλιώς διέρχονται από το δέντρο) και μετρώντας. Αν δεν κρατήσει τις πληροφορίες μέγεθος εύχρηστο, θα χρειαστείτε μια βοηθητική λειτουργία για τον υπολογισμό του μεγέθους.
Η βασική ιδέα, να καταλάβω τι είναι ο δείκτης του τρέχοντος κόμβου. Αν είναι μικρότερη από k, θα πρέπει να αναζητήσετε το αριστερό υποδένδρο. Αν είναι μεγαλύτερη από k, αναζητήστε το δικαίωμα συμψηφισμού των κόμβων υπολογίζονται από την αριστερή και την τρέχουσα. Σημειώστε ότι αυτή είναι ουσιαστικά η ίδια με την αναζήτηση μέσω τακτικής BST, εκτός από αυτή τη στιγμή αναζητούμε με δείκτη, δεν είναι δεδομένα. Μερικά ψευδοκώδικα:
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
Για να φανεί, να εξετάσει αυτό το δέντρο με τις σημειώνονται δείκτες (δεν χρειάζεται καν να ανησυχείτε για τα δεδομένα που δεν είναι σημαντικό στην αναζήτηση):
3
/ \
2 6
/ / \
0 4 7
\ \
1 5
Ας υποθέσουμε ότι θέλουμε να βρούμε το 2ο (k = 2).
Ξεκινώντας από 3, το μέγεθος του αριστερού υποδένδρου είναι 3.
Είναι μεγαλύτερη από k έτσι κινηθεί προς τα αριστερά υποδένδρο.
Το μέγεθος του αριστερού υποδένδρο είναι 2.
k είναι επίσης 2 έτσι ώστε η τρέχουσα κόμβος πρέπει να είναι η 2η.
Ας υποθέσουμε ότι θέλουμε να βρούμε το 4ο (k = 4).
Ξεκινώντας από 3, το μέγεθος του αριστερού υποδένδρου είναι 3.
Είναι λιγότερο από l, έτσι προσαρμόσει το νέο k να είναι 0 (k»= 4 - (3 + 1)) και να κινηθεί προς τα δεξιά υποδένδρο.
Ξεκινώντας από 6, το μέγεθος του αριστερού υποδένδρου είναι 2.
Είναι μεγαλύτερη από k»(0) έτσι κινηθεί προς τα αριστερά υποδένδρο.
Το μέγεθος του αριστερού υποδένδρο είναι 0.
k»είναι επίσης 0, έτσι το ρεύμα κόμβος πρέπει να είναι η 4η.
Μπορείτε να πάρετε την ιδέα.