2013-11-27 103 views
0

我正在使用标准过程删除树的所有节点,遍历后有序并删除节点。当我使用前序遍历来显示空树时,我得到访问冲突错误,我相信这与空指针有关。在删除树的节点时出现访问冲突错误

void deleteallnodes(struct node **head){ 
    if(*head==NULL) 
     return ; 
    { 
    deleteallnodes(&((*head)->left)); 
    deleteallnodes(&((*head)->right)); 
    free(*head); 
    } 
} 
void main() { 
    insert(&root,5); 
    insert(&root,10); 
    insert(&root,2); 
    deleteallnodes(&root); 
    preorder(root); 
} 
void preorder(struct node *root) 
{ 
if (root) 
{ 
    printf("\t %d",root->data); 
    preorder(root->left); 
    preorder(root->right); 
} 
} 
+1

这个问题与你的'deleteallnodes'函数无关。发布预订代码;那是你问题的地方是 – smac89

回答

0

当您删除它们时,您并未清除节点。更改代码看起来像

free(*head); 
*head = NULL; // add this line 

否则,在preorderif (root)将已删除节点的成功,你会漫步到内存中,你不用管。

+0

这是不正确的?随意说出什么不起作用(或点击“打勾”标记为正确)。 –