数组的版本并不怎么直观,因为在数组中实现的树没有“层”的概念。代替的是节点的“编号”,通过这个编号可以向“下一层”去找节点,也可以通过编号获得字符串的一些其他信息。
int tree[1000007][26]; //存下一个点的位置 int sz;//节点个数 ll value[1000007];//节点的值 int n,m; void init(){ sz=0; memset(tree,0,sizeof(tree)); memset(value,0,sizeof(value)); } void insert(string s){ int len=s.length(); int u=0; for(int i=0;i<len;i++){ int temp=s[i]-'a'; if(!tree[u][temp]) tree[u][temp]=++sz; u=tree[u][temp]; value[u]++; } } ll query(string s){ int len=s.length(); int u=0; for(int i=0;i<len;i++){ int temp=s[i]-'a'; if(!tree[u][temp]) return 0; u=tree[u][temp]; } return value[u]; }