最近、私はBSTの実装を書くようになりましたが、私はまだポインタで苦労しています。私の問題の第一は、与えられたノードのポインタが引数として渡され、与えられたノードの先行ノードへのポインタを返す、関数を持つ与えられたノードの '先祖'を見つけることです。私は関数を呼び出して引数を与えて論理的に考えようとしましたが、私は立ち往生しています。ポインタを関数から呼び出し、ポインタを再帰的に呼び出す - BST
まず第一に、私はこのような「メイン」に「ルート」ノードを宣言した:tree *root;
、その後、私は私はこのような機能findPredecessor
を呼び出し、そこから機能を呼び出す:del(&root, k1);
を、ここでdel
関数の宣言です:void del(tree **root, int k)
私はこのように宣言された全体のBSTツリーを通過する 'iterator'を使用します:tree *w = NULL
。最後に、ここで私は(del
関数内)findPredecessor
関数を呼び出す方法は次のとおりです。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
でそうであるように、私は「メイン」同じやり方で呼んでいます。私は私の問題が何らかの種類の参照/ポインタ関連であることを知っている、私は助けに感謝するだろう。私の英語のために申し訳ありません。