字典树模板( 指针版 && 数组版 )
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字典树模板( 指针版 && 数组版 )相关的知识,希望对你有一定的参考价值。
模板 :
#include<string.h> #include<stdio.h> #include<malloc.h> #include<iostream> #include<algorithm> using namespace std; const int maxn = 26; struct Trie { Trie *Next[maxn]; int v; inline void init(){ this->v = 1; for(int i=0; i<maxn; i++) this->Next[i] = NULL; } }; Trie *root = (Trie *)malloc(sizeof(Trie)); void CreateTrie(char *str) { int len = strlen(str); Trie *p = root, *tmp; for(int i=0; i<len; i++){ int idx = str[i]-‘a‘; if(p->Next[idx] == NULL){ tmp = (Trie *)malloc(sizeof(Trie)); tmp->init(); p->Next[idx] = tmp; }else p->Next[idx]->v++; p = p->Next[idx]; } p->v = -1;//若为结尾,则将v改成-1,当然字典树里面的变量都是要依据题目 //设置并且在特定位置赋值的 } int FindTrie(char *str) { int len = strlen(str); Trie *p = root; for(int i=0; i<len; i++){ int idx = str[i]-‘a‘; p = p->Next[idx]; //...进行一系列操作 } } inline void DelTrie(Trie *T) { if(T == NULL) return ; for(int i=0; i<maxn; i++){ if(T->Next[i] != NULL) DelTrie(T->Next[i]); } free(T); return ; } int main(void) { root.init();//!!! //... }
数组版
字典树算法参考 ==> http://www.cnblogs.com/tanky_woo/archive/2010/09/24/1833717.html
以上是关于字典树模板( 指针版 && 数组版 )的主要内容,如果未能解决你的问题,请参考以下文章
[模板]洛谷T3369 普通平衡树 链表&递归版无父指针版Splay