前缀树的介绍:
https://leetcode-cn.com/problems/implement-trie-prefix-tree/solution/trie-tree-de-shi-xian-gua-he-chu-xue-zhe-by-huwt/
Trie,又称前缀树或字典树。
主要用于:
1:查找某个字符串是否存在该数据结构中
2:查找是否存在某前缀的字符串
包含三个单词 “sea”,“sells”,“she” 的 Trie 会长啥样呢?
简化后:
直接套模板:
class Trie {
public:
bool isEnd; //标志为末尾
Trie *child[26];
Trie() {
isEnd = false; //初始化为false
for (int i = 0; i < 26; ++i) child[i] = nullptr;
}
void insert(string word) {
Trie* tmp = this; //this指针
for (auto& ch : word) {
if (!tmp->child[ch - 'a']) tmp->child[ch - 'a'] = new Trie(); //加括号调用没有参数的构造函数
tmp = tmp->child[ch - 'a'];
}
tmp->isEnd = true;
}
bool search(string word) {
Trie* tmp = this;
for (auto& ch : word) {
if (!tmp->child[ch - 'a']) return false;
tmp = tmp->child[ch - 'a'];
}
return tmp->isEnd;
}
bool startsWith(string prefix) {
Trie* tmp = this;
for (auto& ch : prefix) {
if (!tmp->child[ch - 'a']) return false;
tmp = tmp->child[ch - 'a'];
}
return true;
}
};