Ecco quello che ho fatto. Nel mio programma di rango di un elemento è definito come il 1+ (senza di elementi maggiori di quell'elemento). Si può notare che l'elemento non è tenuta alla presentazione nella struttura.
Algoritmo per trovare Classifica:
1.In la struttura ad albero tenere traccia dei non di elementi in un albero secondario tra cui la radice. Così il capo della volontà albero elementi totali nella struttura.
2.Compare l'elemento con un nodo, se è più piccolo del nodo, poi ci sono (1 + No.of elementi figlio destro) Elementi superiore la chiave element.Add al totale e ricorsivamente ricercare l'elemento nel figlio sinistro.
3. Se l'elemento è maggiore del nodo principale, allora basta cercare l'elemento in modo ricorsivo nel bambino a destra. (Non c'è bisogno di aggiungere nulla dal momento che stiamo trascurando l'albero a sinistra, in cui tutti gli elementi sono meno della data chiave)
4.Terminate l'algo quando si trova l'elemento vengono raggiunti null.
Il dato programma non restituisce alcun di elementi superiore alla data chiave. 1+ il valore restituito è la posizione.
frammento di codice:
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);
}
Spero che questo ti aiuti :)