字典树(前缀树)
前缀树的题目描述
https://leetcode.cn/problems/implement-trie-prefix-tree/description/
代码
// 定义 Node 类
struct Node {
unordered_map<char, Node*> children; // 存储子节点
bool end; // 标记是否为单词的结尾
Node(bool f = false) : end(f) {} // 构造函数,初始化为 false
};
// 定义 Trie 类
class Trie {
public:
Trie() {
root = new Node();
}
void insert(const string& word) {
Node* node = root;
for (char c : word) {
if (node->children.find(c) == node->children.end()) {
node->children[c] = new Node();
}
node = node->children[c];
}
node->end = true;
}
bool search(const string& word) {
Node* node = root;
for (char c : word) {
if (node->children.find(c) == node->children.end()) {
return false;
}
node = node->children[c];
}
return node->end;
}
bool startsWith(const string& prefix) {
Node* node = root;
for (char c : prefix) {
if (node->children.find(c) == node->children.end()) {
return false;
}
node = node->children[c];
}
return true; // Prefix exists
}
~Trie() {
destroyTrie(root); // 清理内存
}
private:
Node* root;
void destroyTrie(Node* node) {
for (auto& pair : node->children) {
destroyTrie(pair.second);
}
delete node;
}
};

浙公网安备 33010602011771号