最近我開始編寫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,這裏有一個身體功能全刪除:
void delAll(tree **root) {
if (*root == NULL) {
return;
}
delAll(&((*root)->left));
delAll(&((*root)->right));
free(*root);
}
,這我是從「主」相同的方式調用,因爲我與del
做。我知道我的問題是一些相關的參考/指針,我會感謝幫助。對不起我的英語不好。