单词查找树简介
Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。
单词查找树的模拟过程可以看链接:Prefix tree
对于下图的Trie树, 总共有4个单词,abc, ad, efa, ef
代码实现
节点:
#define CHARLENGTH 256
typedef struct TrieNode {
struct TrieNode *next[CHARLENGTH];
int isEndOfWord;
int count; //子节点的数量
char value;
} TrieNode, *TrieNodePtr, *TrieSTPtr;
插入一个节点:
void insert(TrieSTPtr root, char *key) {
int i = 0;
TrieSTPtr tmp = root;
while (*(key + i) != '\0') {
putchar(*(key+i));
if (tmp->next[*(key + i)] == NULL) {
TrieNodePtr t = createTrieNode(*(key + i));
tmp->next[*(key + i)] = t;
tmp->count++;
}
tmp = tmp->next[*(key + i)];
i++;
}
tmp->isEndOfWord = TRUE;
}
搜索一个单词:
int searchTrie(TrieSTPtr root, char *str)
{
if (root == NULL)
return 0;
TrieSTPtr tmp = root;
int i = 0;
while (str[i] !=