【发布时间】:2011-03-29 20:39:56
【问题描述】:
我定义了一棵树,
struct tree {
char label[MAX_LENGTH];
char value[MAX_LENGTH];
struct tree *child;
struct tree *next;
};
现在我需要释放这棵树分配的内存。我写了以下代码。
unsigned int tree_free(struct tree *root)
{
struct tree *current = NULL, *next = NULL, *child = NULL;
unsigned int freecnt = 0;
current = root;
while(current != NULL)
{
next = current->next;
child = current->child;
xfree(current);
freecnt += tree_free(child) + 1;
current = next;
}
return freecnt;
}
此方法返回它释放的项目数,以便我可以根据分配的数量来验证它。此代码有效。但我不确定这是正确的做事方式。
这是一个后缀树实现。对于项目 s,stack,over,overflow,stackoverflow,树看起来像
root
-s
--stack
---stackoverflow
-over
--overflow
欢迎提出任何改进代码的建议。
【问题讨论】:
-
您遗漏了一些细节:(1)树的结构是什么?从代码中可以看出它不是“香草”二叉树。 (2)
xfree是什么? -
它不是二叉树。这是一种后缀树的实现。 xfree 只是 free() 的一个包装器。一棵树将有多个子元素,而不仅仅是像二叉树那样的两个。
-
编辑了我的帖子以使其清楚。
标签: c algorithm memory-management tree