Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:做字典这类题的心得.In Reply To:做字典这类题的心得. Posted by:fql5188 at 2008-07-18 17:51:53 这也是我看别人的二叉查找树,很简单,很容易上手. #include<stdio.h> #include<string.h> #include<ctype.h> int mark=0;//输出标记。 struct node { char s[20]; int count; node *lchild; node *rchild; }; node *insertT(node *root,char s[]) { if(root==NULL) { node *p; p=new node; strcpy(p->s,s); p->count=1; p->lchild=NULL; p->rchild=NULL; return p; } else if(strcmp(s,root->s)<0) { root->lchild=insertT(root->lchild,s); } else if(strcmp(s,root->s)>0) { root->rchild=insertT(root->rchild,s); } else root->count+=1; return root; } void midorder(node *root) { if(root!=NULL) { midorder(root->lchild); if(root->count>1) { printf("%s %d\n",root->s,root->count); mark=1; } midorder(root->rchild); } } int main() { char march[2][25]={{"ABCDEFGHIJKLMNOPRSTUVWXY"},{"222333444555666777888999"}}; int m; node *root; root=NULL; scanf("%d",&m); while(m--) { char str[50]; char s[20]; scanf("%s",str); int i,j,k,len; len=strlen(str); k=0; for(i=0;i<len;i++) { if(k==3) { s[k]='-'; k++; i-=1; continue; } if(str[i]=='-') continue; if(isalpha(str[i])) { for(j=0;j<24;j++) { if(str[i]==march[0][j]) { s[k]=march[1][j]; k++; break; } } } if(str[i]>='0'&&str[i]<='9') { s[k]=str[i]; k++; } } s[k]='\0'; root=insertT(root,s); } midorder(root); if(mark==0) printf("No duplicates.\n"); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator