我正在使用标准程序删除树的所有节点,有序地遍历并删除节点。当我使用预序遍历来显示空树时,我收到了一个访问冲突错误,我认为必须这样做用空指针。
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);
}
}
答案 0 :(得分:0)
删除节点时不清除节点。将代码更改为
free(*head);
*head = NULL; // add this line
否则,在preorder
中,if (root)
将成功删除节点,您将漫游到您无法控制的内存中。