Hier ist, was ich getan habe. In meinem Programm wird der Rang eines Elements definiert als 1+ (keine Elemente größer ist als das Element). Sie können hier beachten Sie, dass das Element nicht im Baum darstellen muss.
Algorithmus finden Rang:
1.In der Baumstruktur Spur der Anzahl der Elemente in einer Unterstruktur hält die Wurzel enthält. So ist der Kopf des Baumes Willen enthält insgesamt Elemente in dem Baum.
2.Compare das Element mit einem Knoten, wenn er kleiner ist als der Knoten ist, dann gibt es (1 + Anzahl Elemente in rechten Kind) Elemente größer ist als die Taste, um die Gesamt element.Add und die Suche rekursiv das Element in der linkes Kind.
3. Wenn das Element größer ist als der Wurzelknoten ist dann suchen Sie einfach das Element rekursiv in dem richtigen Kind. (Keine Notwendigkeit, etwas hinzuzufügen, da wir den linken Baum vernachlässigen, in der alle Elemente sind kleiner als die gegebene Taste)
4.Terminate die algo, wenn Sie das Element finden erreicht null.
Das gegebene Programm gibt keine Elemente größer als die angegebenen Schlüssel. 1+ der zurückgegebene Wert ist der Rang.
Code-Auszug:
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);
}
Hoffe das hilft :)