Двоичное дерево, не может освободить память
Я создал двоичное дерево (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;
}
}
Все остальное работает нормально - показывает inorder, показывает max и min (все рекуррентно), выполняет поиск, подсчитывает узлы и высоту дерева, поэтому похоже, что free(x) действительно освобождает статический массив char имени первого имени, который фактически является первой переменной в определении структуры, Вот моя структура:
typedef struct wezel {
char f_name[SIZE];
char s_name[SIZE];
long int number;
struct wezel* left;
struct wezel* right;
struct wezel* parent;
} node;
РАЗМЕР определяется как 64. Спасибо за вашу помощь, я действительно застрял:(