我似乎無法爲我的生活弄清楚我的代碼在刪除整個BST時出了什麼問題。C - 刪除整個BST時出錯
我的身影,因爲似乎沒有成爲一個問題與此:
void emptyTree(BST **root){
if((*root)!=NULL){
emptyTree(&(*root)->left);
emptyTree(&(*root)->right);
free(*root);
}
}
那麼整個問題在於每個節點的樹的初始入口。任何人都可以指出這裏有什麼問題嗎?
void insertNode(BST **root, BST *temp){
if((*root)!=NULL){
temp->parent = *root;
if(((*root)->value) < (temp->value))
insertNode(&(*root)->right,temp);
else if(((*root)->value) > (temp->value))
insertNode(&(*root)->left,temp);
else if(((*root)->value) == (temp->value)){
printf("The number %i is already in the tree.\n",temp->value);
return;
}
} else {
*root = temp;
printf("%i was added to the tree.\n",temp->value);
return;
}
}
void newNode(BST **root, int x){
BST *newnode;
newnode = (BST *)malloc(sizeof(BST));
newnode->value = x;
newnode->left = newnode->right = newnode->parent = NULL;
insertNode(root,newnode);
}
它編譯運行它絕對是對每個函數的權利(包括一次刪除一個節點的權利)。除「全部刪除」(emptyTree)之外。它不會刪除所有內容(?)。當我運行emptyTree函數時,它甚至不會顯示錯誤。它只有當我打印整棵樹時纔會出錯。
那麼,有一件事可能是[在C中,你不應該投入返回或'malloc'](http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc )。 – 2014-09-21 11:03:33
您需要逐步調試調試器中的代碼,以查看發生了什麼 - 這比通過查看代碼(或者要求其他人執行相同操作)來猜測出現問題更有成效。 – 2014-09-21 11:04:04
你說有什麼不對。你怎麼知道?它是否編譯?跑?刪除文件呢? – usr2564301 2014-09-21 11:04:59