2016-11-11 113 views
0

最近我開始編寫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做。我知道我的問題是一些相關的參考/指針,我會感謝幫助。對不起我的英語不好。

回答

0

我想你在聲明它之前調用findPredecessor()。只需添加一個前向聲明。或者你可以重新安排你的代碼,以便在del()之前實現findPredecessor()。