字典树trie

字典树Trie又称为前缀树PrefixTree,主要用于高效解决前缀相关的问题。常见的Trie有数字Trie,字母Trie,以及01-Trie。

这里以字母Trie为例介绍其用法,要求实现添加单词,查找单词和查找前缀的功能,详情可参考这里

首先需要定义树节点结构。

struct Node {
    int val;
    struct Node *next[26];
}root;

插入由小写字母构成的单词。

void insert(string &word) {
    Node *p = &root;
    for (auto i : word) {
        int d = i - 'a';
        if (p->next[d] == NULL)
            p->next[d] = new Node();
        p = p->next[d];
    }
    p->val += 1;
}

给定由小写字母构成的单词,问集合中是否存在。

bool search(string &word) {
    Node *p = &root;
    for (auto i : word) {
        int d = i - 'a';
        if (p->next[d] == NULL)
            return false;
        p = p->next[d];
    }
    return p->val > 0;
}

给定由小写字母构成的串,问集合中是否存在以该串为前缀的单词。

bool startsWith(string &prefix) {
    Node *p = &root;
    for (auto i : prefix) {
        int d = i - 'a';
        if (p->next[d] == NULL)
            return false;
        p = p->next[d];
    }
    return true;
}
Table of Contents