我刚刚开始编程,我有一个初学者问题:
所以我有一个特里树,我想用它来存储来自多个文件的大量单词。
为了在我将所有单词从一个文件插入树中后每次都这样做,我需要释放树的内存,以便我可以将树重用于下一个文件。 我应该免费使用免费的root吗?或者我需要遍历树并逐个删除所有节点?
这是节点,我已经能够将所有单词插入树中。
struct node{
struct node * parent;
int noempty;
int isword;
int super;
int occurrence;
int leaf;
struct node * child[26];
};
这是我的插入功能:
struct node* insert(struct node *root,char *c){
int i=0;
struct node *temp=root;
int l=length(c);
while(i!=l){
int index=c[i]-'a';
if(temp->child[index]==NULL){
//New Node
struct node *n=(struct node *)malloc(sizeof(struct node));
n->parent=temp;
temp->child[index]=n;
temp->noempty=1;
}
//Node Exist
if(i!=l&&temp->leaf==1){temp->leaf=0;}
temp=temp->child[index];
i++;
}
if(temp->noempty==0){
temp->leaf=1;}
temp->isword=1;
return root;
};
答案 0 :(得分:0)
您必须遍历树并释放每个节点。您为Trie创建的每个节点都已动态分配。如果你只是删除root,那么只释放root用户的内存,而每个其他节点的内存占用堆中的空间。这意味着您有内存泄漏。如果为每个文件创建一个Trie,那么你没有释放的内存可能会相当大。