如何释放包含 char 指针的 BST?
How to free a BST that contains a char pointer?
这是我用来创建 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);
}
只需进行后序遍历(这就是您正在做的)和 free()
分配的内存。 [ free(str)
] 你的情况 free(tree->str)
;
你做对了。更简洁的
void preord(tree *root)
{
if(root)
{
preord(root->left);
preord(root->right);
free(tree->str);
free(tree);
}
}
注意:一旦你知道你当前工作的节点是non-null那么你可以随时释放char *
,只记得children 必须在 parent.
之前释放
这是我用来创建 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);
}
只需进行后序遍历(这就是您正在做的)和 free()
分配的内存。 [ free(str)
] 你的情况 free(tree->str)
;
你做对了。更简洁的
void preord(tree *root)
{
if(root)
{
preord(root->left);
preord(root->right);
free(tree->str);
free(tree);
}
}
注意:一旦你知道你当前工作的节点是non-null那么你可以随时释放char *
,只记得children 必须在 parent.