Я запускаю функцию поиска в двоичном дереве, которая возвращает двоичное дерево с root возвращенного дерева, которое является поисковым запросом, например, если бы у меня было:
100 как root,
50 и 150 как его дочерние элементы,
20 и 70 и 50-е годы ---- & ---- 120 и 170 как дочерние элементы 150
, если I поставив 50 в качестве ключа к моей функции поиска, он вернет двоичное дерево с 50 в качестве root и 20 и 70 в качестве его дочерних элементов. Все это делается с помощью указателей. Моя проблема в том, что я mallo c создаю новую структуру BST (двоичное дерево поиска) каждый рекурсивный вызов и не освобождаю его, поэтому я почти уверен, что у меня утечка памяти, но я не знаю, как исправить это без освобождения памяти перед использованием. Ниже моя функция.
typedef struct node {
int key;
struct node *left, *right;
} Node;
typedef struct binarySearchTree {
Node* top;
} BST;
BST *search(BST* bst, int key) {
// Base Cases: root is null or key is present at root
if (bst->top == NULL || bst->top->key == key) {
return bst;
}
// Key is greater than root's key
if (bst->top->key < key) {
BST *temp = malloc(sizeof(BST));
temp->top = bst->top->right;
return search(temp, key);
}
// Key is smaller than root's key
BST *temp = malloc(sizeof(BST));
temp->top = bst->top->left;
return search(temp, key);
}
Любые мысли были бы очень признательны. Спасибо!