要求:前缀树是指节点为一个字母,用来存字符串的,根什么也不放
思路:正常多叉树每个节点包含值和指向儿子们的指针数组,但是前缀树节点包含的是指向孩子的指针数组,因为只有26个字母可以去掉值了,还有布尔变量表示该节点是否为字符串结尾不然的话就得扫描一遍儿子数组才能判断
class Trie {
private:
bool isEnd;
Trie* next[26];
public:
Trie() {
isEnd=false;
memset(next,0,sizeof(next));
}
void insert(string word) {
Trie* cur=this;
for(char c:word){
if(cur->next[c-'a']==nullptr)
cur->next[c-'a']=new Trie();
cur=cur->next[c-'a'];
}
cur->isEnd=true;
}
bool search(string word) {
Trie* cur=this;
for(char c:word){
if(cur->next[c-'a']==nullptr)
return false;
cur=cur->next[c-'a'];
}
return cur->isEnd;
}
bool startsWith(string prefix) {
Trie* cur=this;
for(char c:prefix){
if(cur->next[c-'a']==nullptr)
return false;
cur=cur->next[c-'a'];
}
return true;
}
};
/**
* Your Trie object will be instantiated and called as such:
* Trie* obj = new Trie();
* obj->insert(word);
* bool param_2 = obj->search(word);
* bool param_3 = obj->startsWith(prefix);
*/