子函数的任务是销毁一个二叉树,思路是从根节点开始找,没找到叶结点(末端结点)就一直往下走,若找到叶结点,则销毁之,然后再返回根结点开始找下一个叶结点,直到树上只剩下根结点。最后销毁根结点。
估摸着可能是是double free或者越界访问,也有可能是死循环,但我实在想不出问题出在什么地方。
void DestroyBT(Tnode *&bt)
{
if(bt==NULL)
{
cout<<"fail:No such a Tree exists!"<<endl;
return;
}
Tnode *t=(Tnode *)malloc(sizeof(Tnode));
while(bt->Lchild!=NULL||bt->Rchild!=NULL)
{
t=bt;
while(t->Lchild!=NULL||t->Rchild!=NULL)
{
if(t->Lchild!=NULL)
t=t->Lchild;
else if(t->Rchild!=NULL)
t=t->Rchild;
}
free(t);
}
free(bt);
bt=NULL;
if(bt==NULL)
cout<<endl<<"Successfully destroyed the Binary Tree!"<<endl;
}
t=bt;
free(t);
你这不已经把根节点free掉了,后面再执行free(bt)就报错了呀