2017-03-01 7 views
0

私はプログラミングを始めたと私は初心者の質問があります。だから私は、トライ木を持っていると私は複数のファイルから単語を大量に保存するためにそれを使用したいCプログラミングの無料トライ木

を。

1つのファイルからすべての単語をツリーに挿入したあとで、次のファイルのツリーを再利用できるように、ツリーのメモリを解放する必要があります。 私は自由を使ってルートを解放するべきですか?または、ツリーをたどってすべてのノードを1つずつ削除する必要がありますか?

ここにノードがあります。すべての単語をツリーに挿入できます。

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

あなたが求めていることは明確ではありません。 [mcve]を提供し、問題について具体的に記述してください。 – Olaf

+2

各単一ノードを割り当てる場合は、各単一ノードの割り当てを解除(解放)する必要があります。 mallocを呼び出すたびに、ある時点で無料呼び出しが必要になります。 – Evert

+0

トラバースとフリー。 –

答えて

0

あなたは木や無料のすべてのノードを通過しなければならない:

struct node{ 
struct node * parent; 
int noempty; 
int isword; 
int super; 
int occurrence; 
int leaf; 
struct node * child[26]; 
}; 

は、ここに私の挿入機能です。 Trie用に作成した各ノードは動的に割り当てられています。ルートを削除するだけでは、ルートのメモリだけが解放され、他のすべてのノードのメモリがヒープのスペースを占有します。つまり、メモリリークが発生しています。ファイルごとにTrieを作成すると、解放していないメモリがかなり増える可能性があります。

関連する問題