Почему моя рекурсивная функция возвращает этот указатель в странном формате? - PullRequest
0 голосов
/ 16 ноября 2018

Итак, я сделал эту функцию для восстановления ближайшего числа из того, что я искал в дереве 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);
}
...