208. Implement Trie (Prefix Tree)

https://leetcode.com/problems/implement-trie-prefix-tree/


class TrieNode {
public:
	// Initialize your data structure here.
	TrieNode() :c(0), isend(false){

	}
	std::map<char, TrieNode>  _sonNodes;
	char c;
	bool isend;
};

class Trie {
public:
	Trie() {
		root = new TrieNode();
	}

	// Inserts a word into the trie.
	void insert(string word) {
		if (word.empty())
		{
			return;
		}
		TrieNode* tmpNode = &root->_sonNodes[word[0]];
		if (tmpNode->c == 0)
		{
			tmpNode->c = word[0];
		}
		for (auto i = 1; i < word.size(); ++i)
		{
			char c = word[i];
			if (tmpNode->c == 0)
			{
				tmpNode->c = c;
			}
			else
			{
				auto it = tmpNode->_sonNodes.find(c);
				if (it == tmpNode->_sonNodes.end())
				{
					tmpNode->_sonNodes[c].c = c;
					tmpNode = &tmpNode->_sonNodes[c];
				}
				else
				{
					tmpNode = &it->second;
				}
			}
		}
		tmpNode->isend = true;
	}

	// Returns if the word is in the trie.
	bool search(string word) {
		TrieNode* tmpNode = root;
		for (auto i = 0; i < word.size(); ++i)
		{
			auto it = tmpNode->_sonNodes.find(word[i]);
			if (it == tmpNode->_sonNodes.end())
			{
				return false;
			}
			else
			{
				tmpNode = &it->second;
			}
		}
		return tmpNode->isend == true;
	}

	// Returns if there is any word in the trie
	// that starts with the given prefix.
	bool startsWith(string prefix) {
		TrieNode* tmpNode = root;
		for (auto i = 0; i < prefix.size(); ++i)
		{
			auto it = tmpNode->_sonNodes.find(prefix[i]);
			if (it == tmpNode->_sonNodes.end())
			{
				return false;
			}
			else
			{
				tmpNode = &it->second;
			}
		}
		return true;
	}

private:
	TrieNode* root;
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值