字典树,也称为单词查找树,Trie树,本质上就是一个26叉树。应用于单词的统计,存储。
如下图所示:
可根据实际场景,定义需要存储的信息。
struct Trie {
int count;
string value;
Trie *child[26];
};
从根开始,向下查找路径。
如插入单词am
,bp
代码实现-插入
void insert(Trie *root, int step, const string &word) {
// 找到插入位置
if (step == word.size()) {
root->count++;
return;
}
if (!root->child[word[step]-'a']) {
root->child[word[step]-'a'] = new Trie();
}
insert(root->child[word[step]-'a'], step + 1, word);
}
同插入过程,从根开始向下查找路径。
如查找单词ca
,ck
代码实现-查找
bool find(Trie *root, int step, const string &word) {
if (step == word.size() && root->count > 0) {
return true;
}
if (root->child[word[step] - 'a']) {
return find(root->child[word[step] - 'a'], step + 1, word);
} else {
return false;
}
}