BST预订删除

时间:2014-02-07 14:48:46

标签: c binary-search-tree preorder

我想知道是否可以在预订模式下释放整个二叉搜索树。我有这个功能:

void preorder_del(struct s_nodo ** tree)
{
     if (*tree != NULL)
        {
          free(*tree);
          preorder_del(&(*tree)->left);
          preorder_del(&(*tree)->right);
        }
}

我认为这不行,释放树的第一片叶子不会让我回想起预订,对吗?

1 个答案:

答案 0 :(得分:2)

您应该在本地录制leftright,以避免在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);
 }