【问题标题】:How to free a BST that contains a char pointer?如何释放包含 char 指针的 BST?
【发布时间】:2015-09-05 06:29:04
【问题描述】:

这是我用来创建 BST 的节点。我怎样才能释放这棵树。以下是我尝试过的尝试,但我不太确定如何释放 str。

typedef struct tree_s tree_t;

struct tree_s 
{
    char *str;
    tree_t *left;
    tree_t *right;
};

void freeTree(tree_t *tree) {
    if (tree == NULL) 
    {
        return;
    }
    /* first delete both subtrees */
    freeTree(tree->left);
    free(tree->str);
    freeTree(tree->right);

    /* then delete the node */
    free(tree);
 }

【问题讨论】:

  • 你是如何分配“str”开始的?
  • @selbie 我 malloc 了
  • 一旦你删除了整个树,第二次你将再次添加节点时,你可能会得到错误,因为你一定没有将root 的值更改为 NULL
  • 你的代码在我看来不错

标签: c tree binary-search-tree free


【解决方案1】:

只要有一个后序遍历(这就是你正在做的)和free()分配的内存。 [free(str)] 在你的情况下free(tree->str); 你做对了。更简洁的一个

void preord(tree *root)
{
if(root)
{
   preord(root->left);
   preord(root->right);
   free(tree->str);
   free(tree);
}
}

注意:一旦你知道你当前工作的节点是非空的,那么你可以随时释放char *,只记得子节点必须在父节点之前被释放。

【讨论】:

  • @Qpls.:检查我的答案。
  • 我试试看。有没有办法知道整棵树是否已完全释放?/检查释放是否成功
  • 您可以使用 valgrind 或 VSstudio 功能。
猜你喜欢
  • 2020-06-23
  • 2013-10-23
  • 1970-01-01
  • 1970-01-01
  • 2016-07-18
  • 2020-03-16
  • 1970-01-01
  • 1970-01-01
  • 2019-02-22
相关资源
最近更新 更多