因此,我正在尝试阅读Trie,这是一个相对新的数据结构。在我读过的地方,trie中的每个节点都包含一个整型变量,它将标记一个单词的结尾,并且还包含26个指针,每个指针指向较低级别的节点(假设这些单词只包含小字母字符)。Trie与Trie发生冲突
现在我面对的问题是,在我看到/阅读实现的地方,他们用一个字符标记节点。像在这种情况下:
http://community.topcoder.com/i/education/alg_tries.png
但我了解特里的方式,我相信每一个边缘应标记为一个字符。虽然,我知道我们没有边缘的数据结构,只是针对节点。但是不会标记边缘更准确?
另外,这是我实现插入的算法。请告诉我,如果你发现它有什么问题。
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;
}
我难以理解我如何实现删除。如果可以的话,请使用删除算法来帮助我。
每个节点都有一条边进入它,所以你可以在边上或它们指向的节点上绘制字母;它涉及到同样的事情。 – zwol
好吧,但是当我说边缘具有权重而不是节点时,我没有错,或者我? – user2560730
你可以考虑一下,无论哪种方式对你更有意义。没关系。 – zwol