İşte yaptım budur. Benim programda bir elemanın sıralaması 1+ (bu öğenin daha büyük elemanların herhangi bir) olarak tanımlanır. Sen element ağacındaki sunmasına gerek yoktur burada not edebilirsiniz.
Algoritma rütbe bulmak için:
ağaç yapısında 1.In kökü içeren bir alt ağacındaki elementlerin hiçbir izlemek. Yani ağaç irade baş ağacında toplam öğeler içeriyor.
Bu düğüm daha küçük ise, o zaman temel toplam için element.Add daha büyük (sağ çocuk 1 + Kataloğundaki elemanları) elemanlar vardır ve özyinelemeli elemanını arama bir düğüm ile eleman 2.Compare sol çocuk.
eleman kök düğüm daha büyüktür 3.If sonra sadece sağ çocukta yinelemeli elemanı arayın. (şey eklemek gerek biz sol ağaç ihmal olduğundan, hangi tüm unsurları verilen anahtarla daha az)
Eğer öğesi boş ulaşıldığında bulduğunda algo 4.Terminate.
Verilen bir program belirli bir anahtar daha büyük elementlerin bir döner. 1+ döndürülen değer sıralamasıdır.
Kod pasajı:
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);
}
Bu yardımcı olur umarım :)