Trie树学习2

Posted Brenda

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Trie树学习2相关的知识,希望对你有一定的参考价值。

数组实现的Trie树 字符容量有限,能够使用链表实现更为大容量的Trie

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <cstdlib>
#include <list>
#include <cmath>

using namespace std;

#define sigma_size 26
#define MAX_LEN 200001



struct trie_node{
	trie_node* next[sigma_size];
	bool is_terminal;
	trie_node(){
		memset(next, 0, sizeof(next));
		is_terminal = false;
	}
};


struct Trie{
	trie_node* root;
	int size;
	int idx(char ch){
		return ch - 'A';
	}
	Trie(){
		root = new trie_node();
		size = 1;
	}

	void Insert(string str){
		trie_node* cur = root;
		int len = str.length();
		for(int i = 0; i < len; i++){
			int ch = idx(str[i]);
			if(cur->next[ch] == NULL){
				cur->next[ch] = new trie_node();
			}
			cur = cur->next[ch];
		}
		cur->is_terminal = true;
                size++;
	}

	bool Query(string str){
		trie_node* cur = root;
		int len = str.length();
		for(int i = 0; i < len; i++){
			int ch = idx(str[i]);
			if(cur->next[ch] == NULL){
				return false;
			}
			else
				cur = cur->next[ch];
		}

		if(cur->is_terminal)
			return true;
		else
			return false;

	}
	
};



以上是关于Trie树学习2的主要内容,如果未能解决你的问题,请参考以下文章

字典树(trie树)学习总结(例题讲解:POJ2001,HDU1251,HDU4825)

字典树Trie学习一:原理解析

学习总结数据结构-Trie/前缀树/字典树-及其最常见的操作

前缀树(字典树/Trie) -----Java实现

Trie树详解(转)

LeetCode 208. 实现 Trie (前缀树)