Voici ce que je l'ai fait. Dans mon programme le rang d'un élément est défini comme étant le 1+ (pas d'éléments plus que cet élément). Vous pouvez noter ici que l'élément ne doit pas présent dans l'arbre.
Algorithme pour trouver rang:
1.In la structure de l'arbre garder une trace du pas d'éléments dans un arbre sous y compris la racine. Ainsi, la tête de la volonté de l'arbre contient des éléments totaux dans l'arborescence.
2.Compare l'élément avec un noeud, si elle est inférieure à celle du noeud, alors il y a (1 + Nbr éléments enfant droit) des éléments supérieurs à la clé il element.Add au total et rechercher de manière récursive l'élément dans la enfant gauche.
3. Si l'élément est supérieur au nœud racine puis il suffit de chercher l'élément récursive de l'enfant droit. (Pas besoin d'ajouter quoi que ce soit puisque nous négligeons l'arbre gauche, où tous les éléments sont inférieurs à la clé donnée)
4.Terminate l'algo lorsque vous trouvez l'élément sont atteint nulle.
Le programme donné ne renvoie pas d'éléments supérieurs à la clé donnée. 1+ la valeur retournée est le rang.
extrait de code:
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);
}
J'espère que cela t'aides :)