c函数擦除所有二叉树元素
c function to erase all the binary tree elements
一个 C-lang 函数,它擦除树的所有元素,当我调用它时它不会崩溃,但是当我试图显示树或调用任何给它 (_root) 的函数时的结果作为参数,它碾压
void free_tree(tree *_root) {//testing, not working
tree p= *_root;
if (p) {
if (p->left) free_tree(&p->left);
if (p->right) free_tree(&p->right);
free(p);
}
}
我验证了函数之外的任何其他可能导致错误的东西,但似乎一切正常,谢谢任何人都可以回答
您没有将 *_root
设置为 NULL。由于该函数递归调用自身,只有第一个实际参数将成为根节点,因此我将参数简单地命名为 t。此外,不需要 left/right 空值检查。试试这个:
void free_tree(tree *t) {
tree p = *t;
if (p != NULL) {
free_tree(&p->left);
free_tree(&p->right);
free(p);
*t = NULL;
}
}
一个 C-lang 函数,它擦除树的所有元素,当我调用它时它不会崩溃,但是当我试图显示树或调用任何给它 (_root) 的函数时的结果作为参数,它碾压
void free_tree(tree *_root) {//testing, not working
tree p= *_root;
if (p) {
if (p->left) free_tree(&p->left);
if (p->right) free_tree(&p->right);
free(p);
}
}
我验证了函数之外的任何其他可能导致错误的东西,但似乎一切正常,谢谢任何人都可以回答
您没有将 *_root
设置为 NULL。由于该函数递归调用自身,只有第一个实际参数将成为根节点,因此我将参数简单地命名为 t。此外,不需要 left/right 空值检查。试试这个:
void free_tree(tree *t) {
tree p = *t;
if (p != NULL) {
free_tree(&p->left);
free_tree(&p->right);
free(p);
*t = NULL;
}
}