首页 > 代码库 > Trie树 模板
Trie树 模板
#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX 27typedef struct node{ int v; struct node *next[MAX];}Trie;Trie *root;void creatTrie(char *str){ int i, id, j; Trie *p = root, *q; int len = strlen(str); for( i=0; i<len; i++) { id = str[i] - ‘a‘; if(p->next[id] == NULL){ q = (Trie *)malloc(sizeof(Trie)); q->v = 0; for( j=0; j<MAX; j++) q->next[j] = NULL; p->next[id] = q; } p = p->next[id]; p->v++; }}void findTrie(char *str){ int i, id; int len = strlen(str); Trie *p = root; for( i=0; i<len; i++) { id = str[i] - ‘a‘; p = p->next[id]; if(p == NULL) return ; if(p->v > 1) printf("%c",str[i]); if(p->v == 1){ printf("%c",str[i]); return ; } }}void delTrie(Trie *T){ int i; if(T == NULL) return ; for( i=0; i<MAX; i++) if(T->next[i] != NULL) delTrie(T->next[i]); free(T);}int main(void){ char str[1003][23]; int n = 0, i; root = (Trie *)malloc(sizeof(Trie)); root->v = 0; for( i=0; i<MAX; i++) root->next[i] = NULL; while(scanf("%s",str[n])!=EOF){ creatTrie(str[n++]); } for( i=0; i<n; i++) { printf("%s ",str[i]); findTrie(str[i]); printf("\n"); } delTrie(root); return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。