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 |
树的做法,贴个代码#include <stdio.h> #include <stdlib.h> #include <string.h> struct item { char a[11],b[11]; //a存储方言,b存储英文 struct item*lchild,*rchild; }; void ruin(struct item*root) { if(root!=NULL) { ruin(root->lchild); ruin(root->rchild); free(root); } } int main() { int i,j,t; struct item*head,*p,*r; char s[50]; //创建根节点 head = (struct item*)malloc(sizeof(struct item)); head->lchild = NULL; head->rchild = NULL; gets(s); if(s[0]!='\0') { for(i=0;s[i]!=' ';i++) head->b[i] = s[i]; head->b[i] = '\0'; j = i+1; for(i=0;s[j]!='\0';i++,j++) head->a[i] = s[j]; head->a[i] = '\0'; } //建立字典树 gets(s); while(s[0]!='\0') { //做节点r r = (struct item*)malloc(sizeof(struct item)); r->lchild = NULL; r->rchild = NULL; for(i=0;s[i]!=' ';i++) r->b[i] = s[i]; r->b[i] = '\0'; j = i + 1; for(i=0;s[j]!='\0';i++,j++) r->a[i] = s[j]; r->a[i] = '\0'; //将结点r添加到字典树 p = head; while(1) { if(strcmp(r->a,p->a)<0) { if(p->lchild!=NULL) p = p->lchild; else { p->lchild = r; break; } } else { if(p->rchild!=NULL) p = p->rchild; else { p->rchild = r; break; } } } //读入下一行 gets(s); } //进行查询 while(gets(s)!=NULL) { p = head; while(p!=NULL) { t = strcmp(s,p->a); if(t==0) { puts(p->b); break; } else if(t<0) p = p->lchild; else p = p->rchild; } if(p==NULL) printf("eh\n"); } //销毁二叉树 ruin(head); return 0; } //用的二叉排序树,400多ms Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator