我已经制作了一个二叉树(BST),它运行得很好,但我无法释放我分配的内存。节点由指针(左,右,父)和数据组成,这是名字,名称和电话号码。名字和名称是静态字符数组,电话号码是int,它也是我的树的键。我用这个函数来释放内存:
void FreeYourTree(node* x)
{
if (!x)
return;
FreeYourTree(x->left);
FreeYourTree(x->right);
free(x);
x = NULL;
}
但是当我使用该功能然后显示我的树inOrder时它仍然显示记录但有时带有一些垃圾字符而不是名字。我真的找不到那个错误。我也给你我的插入功能:
void insert(node** root)
{
node* x = (node*) malloc(sizeof(node));
if (x == NULL)
{
printf("Malloc error");
return;
}
printf("put first name: ");
scanf("%s", x->f_name);
printf("put name: ");
scanf("%s", x->s_name);
printf("put number: ");
scanf("%ld", &(x->number));
x->left = NULL;
x->right = NULL;
x->parent = NULL;
node* a = NULL;
node* walk = *root;
while (walk != NULL)
{
a = walk;
if (x->number < walk->number)
{
walk = walk->left;
} else {
walk = walk->right;
}
}
x->parent = a;
if (a == NULL)
{
*root = x;
return;
}
if (x->number < a->number)
{
a->left = x;
} else {
a->right = x;
}
}
其他一切正常 - 显示顺序,显示最大和最小(一切都经常),搜索,计算节点和树高,所以它看起来像free(x)真正释放静态名字char数组,这实际上是第一个变量在struct定义中。这是我的结构:
typedef struct wezel {
char f_name[SIZE];
char s_name[SIZE];
long int number;
struct wezel* left;
struct wezel* right;
struct wezel* parent;
} node;
SIZE定义为64。 谢谢你的帮助,我真的被卡住了:(