Хорошо, у меня есть Бинарное дерево поиска, построенное с использованием только структур и указателей C, потому что я безумен и не хочу использовать C ++. В любом случае, у меня есть некоторые серьезные утечки памяти, так как я , предполагая free(tree)
, дерево, являющееся экземпляром структуры ниже, не освобождает всех потомков этого дерева. .
Вот мой узел:
struct node{
struct node* parent;
struct node* left;
struct node* right;
int key; //the value of the node
};
и вот мой bst:
struct bst{
struct node* root;
int elements; //number of nodes in the bst
};
Так что мой вопрос, есть ли лучший способ сделать это, чем рекурсивный вызов функции удаления? например (написать это на месте):
void delete_tree(struct node* n){
if(n == NULL) return;
struct node* left = n->left;
struct node* right = n->right;
free(n);
delete_tree(left);
delete_tree(right);
}