首页 > 代码库 > 01字典树贪心查询+建立+删除(个人模版)
01字典树贪心查询+建立+删除(个人模版)
01字典树贪心查询+建立+删除:
1 #define maxn 2 2 typedef struct tree 3 { 4 tree *nex[maxn]; 5 int v; 6 int val; 7 }tree; 8 tree root; 9 void init() 10 { 11 for(int i=0;i<maxn;i++) 12 { 13 root.nex[i]=NULL; 14 } 15 } 16 void creat(char *str,int va) 17 { 18 int len=strlen(str); 19 tree *p=&root,*q; 20 for(int i=0;i<len;i++) 21 { 22 int id=str[i]-‘0‘; 23 if(p->nex[id]==NULL) 24 { 25 q=(tree *)malloc(sizeof(root)); 26 q->v=1; 27 for(int j=0;j<2;j++) 28 { 29 q->nex[j]=NULL; 30 } 31 p->nex[id]=q; 32 } 33 else 34 { 35 p->nex[id]->v++; 36 } 37 p=p->nex[id]; 38 if(i==len-1) 39 { 40 p->val=va; 41 } 42 } 43 } 44 void del(char *str) 45 { 46 int len=strlen(str); 47 tree *p=&root; 48 for(int i=0;i<len;i++) 49 { 50 int id=str[i]-‘0‘; 51 p->nex[id]->v--; 52 tree *tmp=p->nex[id]; 53 if(p->nex[id]->v==0) 54 { 55 p->nex[id]=NULL; 56 } 57 p=tmp; 58 } 59 return ; 60 } 61 void find(char *str,int query) 62 { 63 int len=strlen(str); 64 tree *p=&root; 65 for(int i=0;i<len;i++) 66 { 67 int id=str[i]-‘0‘; 68 if(p->nex[1-id]!=0) 69 { 70 p=p->nex[1-id]; 71 } 72 else 73 p=p->nex[id]; 74 if(p==NULL) 75 return ; 76 if(i==len-1)printf("%d\n",p->val^query); 77 } 78 }
01字典树贪心查询+建立+删除(个人模版)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。