【LeetCode208】实现Trie(前缀树)

简介: 这里的前缀树,即“二十六叉树”,但是对于每个结点(对象),我们可以隐性存储一个字符——每个结点(对象)含有一个size为26的指针数组。接着就从根结点开始遍历判

1.题目


image.png


2.思路

这里的前缀树,即“二十六叉树”,但是对于每个结点(对象),我们可以隐性存储一个字符——每个结点(对象)含有一个size为26的指针数组。接着就从根结点开始遍历判断。

注意:

(1)this指针是指向当前对象的指针,又本题中调用这几个函数的使用对象均是根结点,所以下面的this指针指向根结点自己。


(2)C++中考虑防止内存泄漏,需要加上析构函数。


3.代码

class Trie {
private:
    bool isEnd;//记录该结点是否是一个串的结束
    Trie* next[26];//对象指针数组
public:
    /** Initialize your data structure here. */
    Trie() {//构造函数
        isEnd=false;
        memset(next,0,sizeof(next));//给数组赋初值0
        //或者写for(int i = 0; i < 26; i++) son[i] = NULL;
    }
    ~Trie(){//析构函数
        for(int i=0;i<26;i++){
            if(next[i]!=NULL){
                delete next[i];
            }
        }
    }
    /** Inserts a word into the trie. */
    void insert(string word) {
        Trie* node=this;
        for(char c:word){
            int cur=c-'a';
            if(node->next[cur]==NULL){
                node->next[cur]=new Trie;
            }
            node=node->next[cur];
        }
        node->isEnd=true;
    }
    /** Returns if the word is in the trie. */
    bool search(string word) {
        Trie* node=this;
        for(char c:word){
            int cur=c-'a';
            node=node->next[cur];
            if(node==NULL){
                return false;
            }
        }
        return node->isEnd;
    }
    /** Returns if there is any word in the trie that starts with the given prefix. */
    bool startsWith(string prefix) {
        Trie* node=this;
        for(char c:prefix){
            int cur=c-'a';
            if(node->next[cur]==NULL){
                return false;
            }
            node=node->next[cur];
        }
        return true;
    }
};
/**
 * Your Trie object will be instantiated and called as such:
 * Trie* obj = new Trie();
 * obj->insert(word);
 * bool param_2 = obj->search(word);
 * bool param_3 = obj->startsWith(prefix);
 */


相关文章
|
19天前
|
搜索推荐
前缀树Trie
前缀树Trie
|
19天前
|
存储 C++
leetcode-208:实现 Trie (前缀树/字典树)
leetcode-208:实现 Trie (前缀树/字典树)
27 0
|
19天前
|
NoSQL 容器 消息中间件
字典树 (Trie)
字典树 (Trie)
|
7月前
|
存储 Python
字典树(Trie,
字典树(Trie,也称为前缀树或单词查找树)是一种用于存储字符串的树形数据结构。它是一种特殊的多叉树,其中每个节点都包含一个字符和一个指向其子节点的指针数组。字典树的主要作用是用于快速查找字符串和处理字符串的前缀。
39 6
|
10月前
|
搜索推荐
字典树 trie
字典树 trie
35 0
|
11月前
|
搜索推荐 数据格式
Trie字典树
Trie字典树
66 0
Trie字典树
|
12月前
理解前缀树
理解前缀树
40 0
|
存储 算法 C++
【每日算法Day 84】面试必考题:Trie(字典树/前缀树)的实现
【每日算法Day 84】面试必考题:Trie(字典树/前缀树)的实现
|
存储 机器学习/深度学习 算法
|
存储
前缀树
Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。
61 0
前缀树