Итак, я сделал эту функцию для восстановления ближайшего числа из того, что я искал в дереве AVL (например, если числа 1 4 5 6 и если я ищу 5, он вернет 4).
Я сохраняю это число в переменной 'ближе' и проверяю, является ли сравниваемый узел последним узлом в дереве. Если я печатаю closer
во вспомогательной функции, он печатает точное число, которое я хотел, но когда я возвращаю его основной функции, это бессмысленно.
void searchCloser(AVL_TREE* tree, void* search) {
if (AVL_Retrieve(tree,search)!= NULL)
{
NODE* node=tree->root;
while (node->left)
node=node->left;
void* closer=node->dataPtr; //First Element of Tree
node=tree->root;
while (node->right)
node=node->right;
void* end=node; //End of Tree
closer=_searchCloser(tree->root,search,closer,end);
printf("--%d",*(int*)closer);
} else
printf("Nao Encontrado");
}
void _searchCloser(NODE* root, void* search, void* closer, void*end) {
if (root->left)
_searchCloser(root->left,search,closer,end);
if(compare(search,root->dataPtr)==1 && compare(search,closer)==1) //Compare returns 1 for A bigger then B
closer=root->dataPtr;
if (root->right)
_searchCloser(root->right,search,closer,end);
if (end==root)
return(closer);
}