Εδώ είναι αυτό που έχω κάνει. Στο πρόγραμμά μου η κατάταξη ενός στοιχείου ορίζεται ως η 1+ (όχι των στοιχείων είναι μεγαλύτερη από αυτό το στοιχείο). Μπορείτε να σημειωθεί εδώ ότι το στοιχείο δεν χρειάζεται να παρουσιάσει στο δέντρο.
Αλγόριθμο για να βρείτε κατάταξη:
1.In τη δομή δέντρου να παρακολουθείτε την όχι των στοιχείων σε επιμέρους δέντρο, συμπεριλαμβανομένης της ρίζας. Έτσι, ο επικεφαλής της βούλησης δέντρου περιέχει συνολικά στοιχεία στο δέντρο.
2.Compare το στοιχείο με έναν κόμβο, εάν είναι μικρότερο από τον κόμβο, τότε υπάρχουν (1 + No.of στοιχεία στο δεξί παιδί) στοιχεία μεγαλύτερο από το κλειδί αυτό element.Add με το συνολικό και αναδρομικά αναζήτηση του στοιχείου στην αριστερό παιδί.
3. Εάν το στοιχείο είναι μεγαλύτερο από τον κόμβο ρίζα τότε απλά αναζήτηση στο στοιχείο αναδρομικά το δικαίωμα του παιδιού. (Δεν χρειάζεται να προσθέσω τίποτα δεδομένου ότι παραμελούμε το αριστερό δέντρο, στο οποίο όλα τα στοιχεία είναι μικρότερο από το συγκεκριμένο κλειδί)
4.Terminate το algo όταν βρείτε το στοιχείο που έφθασε μηδενική.
Το συγκεκριμένο πρόγραμμα δεν επιστρέφει στοιχείων είναι μεγαλύτερη από το συγκεκριμένο κλειδί. 1+ η επιστρεφόμενη τιμή είναι η τάξη.
Κωδικός απόσπασμα:
int AVLUtils::rank(Node *root,long long val)
{
int n_ele_greater=0;
int rank =0;
if(root == NULL)
return 0;
if(val < root->key)
{
n_ele_greater = 1+this->n_elements(root->right_child)+this->rank(root->left_child,val);
}
else if(val > root->key)
{
n_ele_greater=this->rank(root->right_child,val);
}
else if(val == root->key)
{
return(this->n_elements(root->right_child));
}
return(n_ele_greater);
}
Η ελπίδα αυτό βοηθά :)