C实现二叉搜索树

时间:2011-10-21 08:48:20

标签: c pointers

我一直在尝试在C中实现一个bst。我想我几乎就在那里,但是在我的添加节点功能中,我创建了一个名为current的临时节点来存储树中访问的当前节点。然后当我修改当前节点时,我的orignal指针在函数完成后不会被修改。

我已经读过这个,我想我可能需要一个指针指针,但我不知道如何更新原始结构。

1 个答案:

答案 0 :(得分: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;
}