Her er hva jeg har gjort. I min program rang av et element er definert som den 1+ (ingen av elementene er større enn det element). Du kan merke seg her at elementet ikke behøver presentere i treet.
Algoritme for å finne rang:
1.In trestrukturen holde orden på noen av elementene i en sub tre inkludert roten. Så hodet av treet vilje inneholder totalt elementer i treet.
2.Compare elementet med en node, hvis det er mindre enn den node, så er (1 + No.of tickets elementer i rett barn) elementer er større enn styrings element.Add det til den totale og rekursivt søke elementet i venstre barn.
3. Hvis elementet er større enn rotnoden så bare søke elementet rekursivt i riktig barn. (Ikke nødvendig å legge til noe siden vi neglisjere venstre treet, hvor alle elementene er mindre enn den gitte nøkkelen)
4.Terminate algo når du finner elementet er nådd null.
Den oppgitte programmet ikke returnerer elementer større enn den gitte nøkkelen. 1+ den returnerte verdien er rang.
kodebiten:
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);
}
Håper dette hjelper :)