Недавно я начал писать реализацию BST, и я все еще борется с указателями. Первая из моих проблем заключается в том, что я пытаюсь найти «предшественника» данного узла с функцией, которая задает указатель данного узла в качестве аргумента, возвращает указатель на предшественник данного узла. Я пытался логически мыслить, вызывая функцию и давая аргумент, но я застрял.Возвращая указатель из функции и вызывающей функции с указателем рекурсивно - BST
Прежде всего, я объявил «корень» узел «основной», как это: tree *root;
, затем вызвать функцию, с которой я называю функцию findPredecessor
так: del(&root, k1);
, вот объявление о del
функции : void del(tree **root, int k)
, тогда я использую «итератор», с которым я просматриваю все дерево BST, объявленное следующим образом: tree *w = NULL
. Наконец, вот как я называю findPredecessor
функции (внутри del
функции): tree *predecessor = findPredecessor(w);
и я получаю ошибку C2040 'FindPredecessor': 'tree *(tree *)' differs in levels of indirection from 'int()'
, вот тело findPredecessor
функции:
tree* findPredecessor(tree *w) {
w = w->left;
while (w->right != NULL) {
w = w->right;
}
return w;}
Я также strugling с освобождением памяти от всего дерева, вот тело функции delAll:
void delAll(tree **root) {
if (*root == NULL) {
return;
}
delAll(&((*root)->left));
delAll(&((*root)->right));
free(*root);
}
, который я звоню из «основного» таким же образом, как и я с del
. Я знаю, что моя проблема связана с некоторыми ссылками/указателями, я был бы благодарен за помощь. Извините за мой английский.