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;

}