我想知道是否可以在预订模式下释放整个二叉搜索树。我有这个功能:
void preorder_del(struct s_nodo ** tree)
{
if (*tree != NULL)
{
free(*tree);
preorder_del(&(*tree)->left);
preorder_del(&(*tree)->right);
}
}
我认为这不行,释放树的第一片叶子不会让我回想起预订,对吗?
答案 0 :(得分:2)
您应该在本地录制left
和right
,以避免在free(*tree)
之后访问释放的指针。
if (*tree != NULL)
{
struct s_nodo *l = (*tree)->left;
struct s_nodo *r = (*tree)->right;
free(*tree);
preorder_del(&l);
preorder_del(&r);
}