最近我开始编写BST实现,我仍在努力使用指针。我的第一个问题是我尝试用函数找到给定节点的“前任”,给定节点的指针作为参数返回指向给定节点的前任的指针。我试图通过调用函数和给出参数进行逻辑思考,但是我被卡住了。
首先,我在'main'中声明了'root'节点,如下所示:tree *root;
,然后我调用一个函数从中调用函数findPredecessor
,如下所示:del(&root, k1);
,这里是del
函数的声明:void del(tree **root, int k)
然后我使用'iterator'我通过整个BST树声明如下:tree *w = NULL
。最后,这是我如何调用findPredecessor
函数(在del
函数内):tree *predecessor = findPredecessor(w);
,我得到一个错误C2040 'FindPredecessor': 'tree *(tree *)' differs in levels of indirection from 'int ()'
,这里是findPredecessor
函数的主体:< / p>
tree* findPredecessor(tree *w) {
w = w->left;
while (w->right != NULL) {
w = w->right;
}
return w;}
我还要从整棵树中解除分配内存,这里是一个函数delAll:
void delAll(tree **root) {
if (*root == NULL) {
return;
}
delAll(&((*root)->left));
delAll(&((*root)->right));
free(*root);
}
,我从'main'调用与del
相同的方式。我知道我的问题是某些参考/指针相关,我会感谢你的帮助。抱歉我的英文。
答案 0 :(得分:0)
我认为你在声明之前调用了findPredecessor()。只需添加一个前向声明。或者您可以重新排列代码,以便在del()之前实现findPredecessor()。