字典树(前缀树)

前缀树的题目描述

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;
    }
};
posted @ 2024-08-19 21:41  铜锣湾陈昊男  阅读(8)  评论(0)    收藏  举报