Trie树,又称字典树、单词查找树,是一种树形结构,利用字符串的公共前缀来减少查询时间,最大限度地减少无谓地字符串比较,在统计和处理大量数据方面运用广泛,常用于搜索引擎词频统计。
上图是一棵最基本的字典树,如果将树的根结点到每一个子结点所经过的路径上的字母连起来,就构成了字典中的一个个单词,这棵树就形成了一本字典。每个结点分别包含下一个字母结点的指针,以及从根结点到该结点的路径是否是一个单词的标志,黑色结点表示可构成一个单词,还可包含在建树过程中经过该结点的次数,这个次数用于表示字典中以根结点到该结点所构成的单词为前缀的单词个数。
以英文单词字典树为例,每个结点最多包含26个子结点,因为总共有26个字母(全为小写)。则Trie树的结点可用以下结构体表示:
1 | typedef struct TrieNode |
查询以输入字段为前缀的单词数的实现过程:
首先输入一个正整数n, 表示字典单词数,然后分别输入n个单词来构建字典数,接下来输入一个正整数m,表示要查找的次数,并依次输入要查询的前缀,程序会输出以各个字段为前缀的单词数量。
以下是程序代码:
1 |
|
样例输入
1 | 5 |
样例输出
1 | 2 |
本文为作者kMacro原创,转载请注明来源:https://zkhdev.github.io/2017/03/02/algorithm-trie/