それで、私は比較的新しいデータ構造であるTrieを読み取ろうとしていました。そして、どこを読んでも、トライのすべてのノードは、単語の終わりを示す整数変数で構成され、それぞれが下位レベルのノードを指す26個のポインターで構成されます(単語に小さな文字)。
今私が直面している問題は、実装を見たり読んだりするたびに、ノードを文字でマークすることです。この場合のように:
http://community.topcoder.com/i/education/alg_tries.png
しかし、私が Trie を理解している方法では、すべてのエッジが文字としてマークされるべきであると信じています。ただし、エッジのデータ構造はなく、ノードのデータ構造しかないことはわかっています。しかし、エッジをマークする方がより正確ではないでしょうか?
また、これは挿入を実装するための私のアルゴリズムです。何かおかしなところがありましたら教えてください。
struct trie
{
int val;
trie* aplha[26];
}
trie* insert (trie *root, char *inp)
{
if (*input == '\0')
return root;
if (root == NULL)
{
root = (trie *) malloc(sizeof(trie));
int i = 0;
for (i=0;i<26;i++)
root->alpha[i] = NULL;
}
temp = *input - 'a';
root->alpha[temp] = insert (root->alpha[temp],input+1);
if (*(input+1)=='\0')
root->val = 1;
return root;
}
削除をどのように実装できるかについて、私は困惑しています。可能であれば、削除アルゴリズムを教えてください。