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;
    }
}