Zde je to, co jsem udělal. V mém programu hodnost prvku je definována jako 1+ (počet prvků větší než tento prvek). Můžete na vědomí, zde že element nemusí předkládat ve stromu.
Algoritmus najít hodnost:
1.In stromové struktuře sledovat no prvků v podstromu, včetně kořene. Takže hlava strom bude obsahuje celkem prvky stromu.
2.Compare prvek s uzlem, pokud je menší než uzlu, pak tam jsou (1 + No.of prvky v pravé dítě) prvky větší než klíč ji element.Add na celkový a rekurzivně vyhledávání prvku v left dítě.
3. Pokud prvek je větší než kořenový uzel pak stačí vyhledat prvek rekurzivně v pravém dítěte. (Není třeba nic dodávat, protože jsme zanedbávají levý strom, v níž jsou všechny prvky jsou menší než daný klíč)
4.Terminate na algo když zjistíte prvek dosažení null.
Daný program se vrací počet prvků větší než daný klíč. 1+ vrácená hodnota je pozice.
fragment kódu:
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);
}
Snad to pomůže :)