删除树节点时的访问冲突错误

时间:2013-11-27 18:43:41

标签: c tree

我正在使用标准程序删除树的所有节点,有序地遍历并删除节点。当我使用预序遍历来显示空树时,我收到了一个访问冲突错误,我认为必须这样做用空指针。

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 个答案:

答案 0 :(得分:0)

删除节点时不清除节点。将代码更改为

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

否则,在preorder中,if (root)将成功删除节点,您将漫游到您无法控制的内存中。