LeetCode 208. Implement Trie (Prefix Tree)

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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值