struct TrieNode {
bool isEnd;
vector<TrieNode*> children;
TrieNode():isEnd(false){
children.resize(26, NULL);
}
};
class Trie{
private :
TrieNode* root;
public :
Trie(){
root = new TrieNode();
}
void insert(const string& str) {
TrieNode* runner = root;
for( int i = 0; i < str.size(); i++){
int idx = str[i] - 'a';
if(!runner->children[idx]) {
runner->children[idx] = new TrieNode();
}
runner = runner->children[idx];
}
runner->isEnd = true;
}
bool searchWord(const string& str) {
TrieNode* runner = root;
for( int i = 0; i < str.size(); i++ ) {
int idx = str[i] - 'a';
if( !runner->children[idx] ) return false;
runner = runner->children[idx];
}
return runner->isEnd;
}
bool searchPre(const string& pre) {
}
vector<string> dfs_traverse(){
string oneRst;
vector<string> rst;
helper(root, oneRst, rst);
return rst;
}
void helper( TrieNode* runner, string& oneRst, vector<string>& rst ) {
if(!runner) return;
if(runner->isEnd) {
rst.push_back(oneRst);
}
for( int i = 0; i < 26; i++ ) {
TrieNode* child = runner->children[i];
if(child) {
oneRst.push_back('a' + i);
helper(child, oneRst, rst);
oneRst.pop_back();
}
}
}
};
Trie implementation -- method II
最新推荐文章于 2021-02-27 02:45:43 发布