如何销毁树?
void DestroyTree(BTree T)
{
if (T) {
DestroyTree(T->lchild);
DestroyTree(T->rchild);
free(T);
T = NULL;
}
}
居然不行!? 调用后再遍历它, 会输出无穷多乱码
这样遍历的
void PreOrder(BTree T)
{
if (T) {
printf("%c", T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
怎么回事?求高人指教
[解决办法]
void DestroyTree(BTree T)
{
if (T) {
DestroyTree(T->lchild);
DestroyTree(T->rchild);
free(T);
T = NULL;
}
}
T是普通指针传递,你只能修改实参指向的内容,但改不了这个实参本身。你free了T,这个没错,但T=NULL,不代表上一个结点的T->lchild==NULL或T->Rchild==NULL。楼主还明白了?
你得用指针的指针才对