Вот что я сделал. В моей программе ранг элемента определяется как 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);
}
Надеюсь это поможет :)