2011-10-21 167 views
2

我一直在尝试实施一个bst,在C.我想我几乎在那里,但在我的add节点功能,我创建一个临时节点称为当前存储当前节点在树中被访问。然后当我修改当前节点时,我的信号指针在函数完成后不会被修改。C实现二叉搜索树

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

+1

在另一个人前一天进行相同的练习。添加作业标签... – Manos

+0

不要施加'malloc'的返回值:http://stackoverflow.com/questions/1565496/specifically-whats-dangerous-about-casting-the-result-of-malloc – gnud

+2

你为什么认为问题出在那里? btw wtf是这样的:'struct node ** current =&(* string) - > root;'? –

回答

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; 
} 
+0

感谢我所寻找的只是一个例子或解释,我不知道为什么一些用户,如马诺斯是如此逼迫。 – user557240

+0

只是最后一件事。由于我必须实现特定的头文件,因此不能将参数更改为Bst ** bst,我应该创建另一个单独的函数,还是有更好的方法来执行此操作? – user557240

+1

@ user557240:这是关于家庭作业完整性的一件事情。如果您没有正确标记作业问题,有人可能会为您完成作业而损坏作业。因此,请始终标记作业问题并提供您目前为止的内容(甚至是/尤其是如果它不正确)。人们可能会帮助你处理你的直接绊脚石(并提供诸如malloc返回值之类的辅助评论)而不会破坏任务。 – ccoakley