1. trie基础
(1) 是什么?
Trie,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。
(2) 性质
- 根节点不包含字符,除根节点外每一个节点都只包含一个字符
- 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串
- 每个节点的所有子节点包含的字符都不相同
例如,单词序列a, to, tea, ted, ten, i, in, inn,对应的trie。
(3) 应用
用于统计和排序大量的字符串,但不仅限于字符串,所以经常被搜索引擎系统用于文本词频统计。
(4) 优点
- 最大限度地减少无谓的字符串比较
- 查询效率比哈希表高
2. 一个例子
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 5 #define MAX 256//ascii码有256个字符,故每棵树的子节点最多有256个 6 #define MAXLEN 256//单词最长为256 7 8 typedef struct TrieNode 9 { 10 int count; 11 struct TrieNode *next[MAX]; 12 }TrieNode; 13 14 //插入一个单词 15 void Insert(char *word,TrieNode *root) 16 17 { 18 int i; 19 TrieNode *cur; 20 if(word[0]=='