Я получаю утечку памяти и знаю, что для каждого malloc должна быть бесплатная. Тем не менее, я не уверен, почему мы должны что-то здесь освобождать.
Функция состоит в том, чтобы, учитывая двоичное дерево поиска, вставить в него узел.
Файл заголовка:
typedef struct BSTNode *BSTree;
struct BSTNode {
int value;
BSTree left;
BSTree right;
}
Программа, которую я написал для выполнения этой задачи:
#include <stdio.h>
#include <stdlib.h>
#include "BSTree.h"
BSTree BSTreeInsert(BSTree t, int val) {
if (t == NULL) {
BSTree new = malloc(sizeof(*new));
new->left = NULL;
new->right = NULL;
new->value = val;
return new;
}
if (t->value > val) {
t->left = BSTreeInsert(t->left,val);
} else {
t->right = BSTreeInsert(t->right,val);
}
return t;
}
Вывод программы выглядит правильно, поэтомулогика верна, но это просто утечки памяти.
Функция тестируется на серверах моей школы, поэтому она запускает мою функцию несколько раз на разных входах и сравнивает ее с ожидаемыми выходами. Тесты говорят, что мой вывод правильный, просто есть утечки памяти.