LeetCode 208. Implement Trie (Prefix Tree)

来源:互联网 发布:混凝土配合比软件 编辑:程序博客网 时间:2024/06/05 08:30

如题所示,要求实现字典树的插入,查找单词,和查找前缀的方法。

Implement a trie with insertsearch, and startsWith methods.

Note:
You may assume that all inputs are consist of lowercase letters a-z.

Subscribe to see which companies asked this question.

需要自己设置一个节点Node。节点中应当包含以下两个部分:

1 isEnd:bool类型的变量,主要判断该结点是否为一个单词。

2 child[26]:指向Node结点的指针,下标0~25分别指向26个字母。

在插入的时候,需要在单词的最后一个字母处,将isEnd设置为true。

在查找单词的时候,除了确定字典树中包含了这个单词以外,还要确定最后一个字母的结点中isEnd为true。

查找前缀则只需要是否每一个字母都出现在字典树中即可。

代码实现如下:

class Node{public:bool isEnd = false;Node* child[26];};class Trie {private:Node* root;public:    /** Initialize your data structure here. */    Trie() {        root = new Node();    }    /** Inserts a word into the trie. */    void insert(string word) {    Node *p=root;    for(unsigned int i=0;i<word.length();++i){    if(p->child[word[i]-'a'] == NULL){    Node* temp = new Node();    if(i == word.length()-1)    temp->isEnd = true;    p->child[word[i]-'a']=temp;    p=temp;    }else{    p = p->child[word[i]-'a'];    if(i == word.length()-1)    p->isEnd = true;    }    }    }    /** Returns if the word is in the trie. */    bool search(string word) {    Node *p= root;    for(unsigned int i=0;i<word.length();++i){    if(p->child[word[i]-'a'] == NULL)    return false;    p=p->child[word[i]-'a'];    }    if(p->isEnd == true)    return true;    else    return false;    }    /** Returns if there is any word in the trie that starts with the given prefix. */    bool startsWith(string prefix) {    Node *p = root;    for(unsigned int i=0;i<prefix.length();++i){    if(p->child[prefix[i]-'a'] == NULL)    return false;    p = p->child[prefix[i]-'a'];    }    return true;    }};

0 0
原创粉丝点击