自己写的, 不知道咋错了
class TreeN {
public:
char val;
vector<TreeN*> child;
TreeN() {
}
TreeN(char val){
this->val = val;
}
};
class Trie {
public:
TreeN* root;
/** Initialize your data structure here. */
Trie() {
this->root = new TreeN('0');
}
/** Inserts a word into the trie. */
void insert(string word) {
word += '0';
if(!search(word)){
TreeN* cur = root;
while(word.length()){
int find = 0;
TreeN* child;
for(int i = 0; i < cur->child.size(); i++){
child = cur->child[i];
if(child->val == word[0]){
find = 1;
break;
}
}
if(!find){
cur->child.push_back(new TreeN(word[0]));
}
word = word.substr(1, word.length()-1);
cur = child;
}
}
}
/** Returns if the word is in the trie. */
bool search(string word) {
word += "0";
return searchHelper(word, this->root);
}
bool searchHelper(string word, TreeN* root) {
for(TreeN* child : root->child){
if(child->val == word[0]){
string sub = word.substr(1, word.length()-1);
if(sub.length() == 0)
return true;
else
return searchHelper(sub, child);
}
}
return false;
}
/** Returns if there is any word in the trie that starts with the given prefix. */
bool startsWith(string prefix) {
return searchHelper(prefix, this->root);
}
};
/**
* 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);
*/