gpt4 book ai didi

c - 如果文件树已满,则使用 C 删除文件树

转载 作者:行者123 更新时间:2023-11-30 18:19:20 25 4
gpt4 key购买 nike

编写一个 C 程序来删除树。

我编写了一小段代码来实现此目的,但它进入了无限循环

void deleteTree(struct tnode *root)
{
cout<<root->data<<endl;
if( root->lchild == NULL && root->rchild == NULL)
delete(root);

deleteTree(root->lchild);
deleteTree(root->rchild);
//return root;
}

我想在遍历时删除它。我知道可以使用后序遍历。但还有其他想法吗?

最佳答案

无限循环?实际上应该是访问冲突,又名 SIGSEGV。删除叶子节点时,只需调用delete(root)即可,但不会返回。因此接下来的两个递归deleteTree调用仍然会执行(从而导致SIGSEGV,因为root应该是无效的)。在 delete(root) 之后添加 return; 或使用此:

void deleteTree(struct tnode *root)
{
cout<<root->data<<endl;

if (root->lchild != NULL)
deleteTree(root->lchild);
if (root->rchild != NULL)
deleteTree(root->rchild);
delete(root);
}

由于早期子检查,它还会节省一个函数调用。

关于c - 如果文件树已满,则使用 C 删除文件树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7136451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com