C реализация бинарного дерева поиска


Я пытался реализовать bst, в C. Я думаю, что я почти там, но в моей функции add node я создаю временный узел под названием current для хранения текущего узла, который посещается в дереве. Затем, когда я изменяю текущий узел, мой исходный указатель не изменяется после завершения функции.

Я читал об этом, и я думаю, что мне может понадобиться указатель указателя, но я все еще не совсем знаю, как обновить оригинальную структуру.

1 2

1 ответ:

Вы правы, что проблема связана с указателем на указатель в bstlist_add. Вот пример, который поможет вам понять, что нужно изменить в коде.

int a=10;
int b=20;

void noChange(int * pSomeInt);
void change(int ** ppSomeInt);

int main(int argc,char * argv[])
{
    int * pMainInt=&a;

    noChange(pMainInt);
    //pMainInt will still point to a

    //since the parameter to change is int **, we have to use & here
    change(&pMainInt);
    //pMainInt now points to b

    return 0;
}

void noChange(int * pSomeInt)
{
    //while pSomeInt is a pointer, it is a copy of pMainInt, not a pointer to it 
    //so this creates a pointer to the parameter, pSomeInt, itself
    int ** ppSomeInt=&pSomeInt;

    //so this changes the parameter, pSomeInt
    *ppSomeInt=&b;
}

void change(int ** ppSomeInt)
{
    //ppSomeInt is a pointer to pMainInt, which is itself an int *
    //so *ppSomeInt is pMainInt and not a copy of it
    *ppSomeInt=&b;
}