您的位置:首页 > 其它

[leetcode][trie] Implement Trie (Prefix Tree)

2015-08-18 13:56 417 查看
题目:

Implement a trie with
insert
,
search
,
and
startsWith
methods.

Note:

You may assume that all inputs are consist of lowercase letters
a-z
.
class TrieNode {
public:
// Initialize your data structure here.
TrieNode(char c = '\0') {
val = c;
isEnd = false;
for (int i = 0; i < 26; ++i){
son[i] = NULL;
}
}
~TrieNode(){
for (int i = 0; i < 26; ++i){
if (son[i] != NULL) delete son[i];
}
}
char val;
bool isEnd;
TrieNode *son[26];
};

class Trie {
public:
Trie() {
root = new TrieNode();//root不代表任何字符,剩下的每个TrieNode都代表一个字符,TrieNode的每个TrieNode指针指向下一个字符, 指针的位置代表下一个字符是什么
}
~Trie(){
delete root;
}
// Inserts a word into the trie.
void insert(string word) {
if (word.empty()) return;
int n = word.size();
TrieNode *p = root;
for (int i = 0; i < n; ++i){
char c = word[i];
if (p->son[c - 'a'] == NULL){
TrieNode *q = new TrieNode(c);
p->son[c - 'a'] = q;
}
p = p->son[c - 'a'];
}
p->isEnd = true;
}

// Returns if the word is in the trie.
bool search(string word) {
if (word.empty()) return false;
int n = word.size();
TrieNode *p = root;
for (int i = 0; i < n; ++i){
char c = word[i];
if (p->son[c - 'a'] == NULL) return false;
p = p->son[c - 'a'];
}
return p->isEnd;
}

// Returns if there is any word in the trie
// that starts with the given prefix.
bool startsWith(string prefix) {//TODO
if (prefix.empty()) return false;
int n = prefix.size();
TrieNode *p = root;
for (int i = 0; i < n; ++i){
char c = prefix[i];
if (p->son[c - 'a'] == NULL) return false;
p = p->son[c - 'a'];
}
return true;
}

private:
TrieNode* root;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: