从函数返回指针并用指针递归调用函数 - BST

时间:2016-11-11 16:43:42

标签: c algorithm pointers tree

最近我开始编写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相同的方式。我知道我的问题是某些参考/指针相关,我会感谢你的帮助。抱歉我的英文。

1 个答案:

答案 0 :(得分:0)

我认为你在声明之前调用了findPredecessor()。只需添加一个前向声明。或者您可以重新排列代码,以便在del()之前实现findPredecessor()。