【模板】TRIE树

graph TB; A(($ROOT$)) B(($a$)) C(($b$)) D(($c$)) E(($d$)) F(($d$)) A-->B-->C-->D B-->E A-->F
template<int the_size>
class TRIE_TREE {
	private : 
		struct TRIE_LEAF {
			int sid[26];
			int value;
		} leaf[the_size];
		int tot, ROOT;
		#define sid(u,i) leaf[u].sid[i]
		#define value(u) leaf[u].value
		int turn(char _target) {
			return _target-'a';
		}
	public : 
		void Insert(char *pattern,int val) {
			int u = ROOT;
			for(int i = 0;pattern[i];++i) {
				if(!sid(u,turn(pattern[i]))) 
					sid(u,turn(pattern[i])) = ++tot;
				u = sid(u,turn(pattern[i]));
			}
			value(u) = val;
		}
		int Query(char *text) {
			int u = ROOT;
			for(int i = 0;text[i];++i) {
				if(!sid(u,turn(text[i]))) 
					return 0;
				u = sid(u,turn(text[i]));
			}
			return value(u);
		}
		void Delete(char *pattern) {
			int u = ROOT;
			for(int i = 0;pattern[i];++i) {
				if(!sid(u,turn(pattern[i]))) 
					return;
				u = sid(u,turn(pattern[i]));
			}
			value(u) = 0;
		}
};
TRIE_TREE<100010> trie;

@bikuhiku

posted @ 2022-07-05 15:47  bikuhiku  阅读(5)  评论(0编辑  收藏  举报