Esto es lo que he hecho. En mi programa de la categoría de un elemento se define como el 1+ (sin los elementos mayores que ese elemento). Se puede observar aquí que el elemento no necesita presentar en el árbol.
Algoritmo para encontrar rango:
1.In la estructura de árbol no perder de vista el no de los elementos en un árbol secundario que incluye la raíz. Por lo que el jefe de la voluntad del árbol contiene elementos totales en el árbol.
2.Compare el elemento con un nodo, si es más pequeño que el nodo, entonces hay (1 + N º de elementos en hijo derecho) Elementos mayores que la clave element.Add al total y la búsqueda de forma recursiva el elemento en el hijo izquierdo.
3. Si el elemento es mayor que el nodo raíz a continuación, sólo buscar el elemento de forma recursiva en el hijo derecho. (Sin necesidad de añadir nada ya que estamos descuidando el árbol de la izquierda, en la que todos los elementos están a menos de la clave dada)
4.Terminate el algo cuando encuentre el elemento se alcanzan nula.
El programa dado no devuelve nada de elementos mayores que la clave dada. 1+ el valor devuelto es el rango.
fragmento de código:
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);
}
Espero que esto ayude :)