首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

怎么销毁树

2012-02-28 
如何销毁树?void DestroyTree(BTree T){if (T) {DestroyTree(T-lchild)DestroyTree(T-rchild)free(T)

如何销毁树?
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。楼主还明白了?
你得用指针的指针才对

热点排行