Witam. Mam problem z drzewem AVL. Napisałem rotacje, wstawianie, usuwanie, szukanie, ale muszę napisać jeszcze znajdowanie poprzednika podanej liczby(która nie należy do drzewa)..
próbuję, to zrobić tak jak szukanie danego wierzchołka, a gdy dojdę do najbardziej "zbliżonej" liczby do podanej, która jest od niej mniejsza, to ją zwracam.
Ale niestety coś tutaj działa nie tak.. i nie mam pomysłu co to może być..
oto kod:
long long int poprzednik(AVL *T, long long int x)
{
AVLNode *k;
k = T->root;
long long int element = k->key;
long long int liczba = element;
if(x < element)
{
if(k->left != NULL)
{
if((element > k->left->key) && (x - element < x - k->left->key))
{
element = k->left->key;
liczba = element;
}
T->root = k->left;
poprzednik(T, x);
}
else if(k->left == NULL && element < x)
{
liczba = element;
}
else if(element > x)
{
liczba = x;
}
}
else if(x > element)
{
if(k->right != NULL)
{
if((element < k->right->key) && (x - element > x - k->right->key))
{
element = k->right->key;
liczba = element;
}
T->root = k->right;
poprzednik(T, x);
}
else if(element > x)
{
liczba = x;
}
}
return liczba;
}