一、字典树——Trie
字典树(前缀树)是一种特殊的多叉树,其结点设计与多叉树有所不同。
多叉树一般长这样:
struct TreeNode{
int val;
vector<TreeNode*> chlidren;
}
而字典树的结点,假设包含了‘a’-‘z’的字符:
struct TrieNode{
bool isend;//字符串结束标志
vector<TrieNode*> next(26);//字母映射表
}
可以看出,TrieNode的结点结构中没有直接使用一个成员来保存结点值。而是使用字母映射表next,next中保存了对当前结点而言下一个可能出现的字符,比如:
if(Node->next['b']==NULL)//说明当前结点的下一个字母不可能为'b'
else//说明当前结点的下一结点可以为'b'
这样可能比较难以理解,我们举一个例子,bear和beer两个单词在一棵字典树中是什么样的:
我们定义一个Trie类来实现字典树
class Trie{
private:
bool isend;
Trie* next[26];
}
二、对于字典树ÿ