?Trie又被称为前缀树或者字典树。它的基本作用是用来存储一个字符串集合:{W1, W2, W3, … WN},并且可以用来查询一个字符串S是不是在集合里
?具体来说,Trie一般支持两个操作:
1. Trie.insert(W):第一个操作是插入操作,就是将一个字符串W加入到集合中
2. Trie.search(S):第二个操作是查询操作,就是查询一个字符串S是不是在集合中
?由于Trie的特性,它还特别适合处理一些与前缀有关的查询,比如集合中有几个字符串与S有公共前缀这样的查询
?首先我们来看一下Trie长什么样子:
?上面这棵Trie树包含的字符串集合是{in, inn, int, tea, ten, to}。每个节点的编号是我们为了描述方便加上去的。树中的每一条边上都标识有一个字符。这些字符可以是任意一个字符集中的字符。比如对于都是小写字母的字符串,字符集就是’a’-‘z’;对于都是数字的字符串,字符集就是’0’-‘9’;对于二进制字符串,字符集就是0和1
?从一个节点连出去的边都必须标识不同的字符。所以一个节点最多有|字符集|这么多子节点。其中有一些节点是终结点,我们用黑色表示。对于每一个终结点,如果我们把从根到它的路径上的字符按顺序连起来,就对应着一个集合中的字符串
?比如上图中3号节点对应的路径0123上的字符串是inn,8号节点对应的路径0568上的字符串是ten。终结点与集合中的字符串是一一对应的
TRIE插入
?那么对于给定的字符串集合{W1, W