用于高效检索、插入和存储字符串集合的树形前缀数据结构
字典树(Trie,又称前缀树)是一种哈希树的变体。它的核心特点在于:
isEnd 标记,标示是否存在单词在此处结尾。class Trie {
private:
struct TrieNode {
TrieNode* children[26]; // 26个英文字母指针
bool isEnd; // 单词结尾标记
TrieNode() {
isEnd = false;
for (int i = 0; i < 26; i++) {
children[i] = nullptr;
}
}
};
TrieNode* root;
public:
Trie() {
root = new TrieNode();
}
// 插入单词
void insert(string word) {
TrieNode* curr = root;
for (char c : word) {
int idx = c - 'a';
if (curr->children[idx] == nullptr) {
curr->children[idx] = new TrieNode(); // 动态分裂创建新节点
}
curr = curr->children[idx]; // 沿着路径向下走
}
curr->isEnd = true; // 标记单词结束
}
// 查询完整单词是否存在
bool search(string word) {
TrieNode* curr = root;
for (char c : word) {
int idx = c - 'a';
if (curr->children[idx] == nullptr) return false;
curr = curr->children[idx];
}
return curr->isEnd; // 必须是完整的单词结尾
}
};