Itt van, amit tettem. Az én programot rangot egy elem definíciója 1+ (nincs az elemek nagyobb elem). Akkor itt megjegyezni, hogy az elem nem kell bemutatni a fán.
Algoritmust találni helyezés:
1.In fastruktúrája nyomon követheti a nem az elemek egy al-fa, beleértve a gyökér. Tehát a fejét a fa tartalmaz összesen elemek a fa.
2.Compare az elemet egy csomópont, ha ez kisebb, mint a csomópont van, akkor (1 + létszám elemek helyes gyerek) elemek nagyobb, mint a kulcs element.Add ez a teljes és rekurzív keresés az elemet a bal gyermek.
3.Ha az elem nagyobb, mint a gyökér, akkor csak keressen az elem rekurzívan a jobb gyermek. (Nem kell hozzá semmit, mert mi elhanyagoljuk a bal fa, amelyben az összes elem kisebb, mint a megadott kulcs)
4.Terminate az algo, ha megtalálja az elem elérésekor null.
Az adott program nem ad vissza az elem nagyobb, mint az adott gombot. 1+ a visszaadott érték a rangsorban.
kódrészlet:
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);
}
Remélem ez segít :)