阅读:1095回复:0
二分树问题
这是程序代码:
#include <stdio.h> #include <stdlib.h> //for malloc #include <string.h> //for strcmp #include <ctype.h> //for isspace #include <conio.h> //for getch() and ungetch struct tnode{ char *word; int count; struct tnode *left; struct tnode *right; }; #define MAXWORD 100 struct tnode *addtree(struct tnode *,char *); void treeprint(struct tnode *); int getword(char *,int); void main() { struct tnode *root; char word[MAXWORD]; root=NULL; while(getword(word,MAXWORD)!='#') //'#' is the sign of end input if(isalpha(word[0])) root=addtree(root,word); treeprint(root); } int getword(char *word,int lim) { int c; char *w=word; while(isspace(c=getch())) ; if(c!=EOF) *w++=c; if(!isalpha(c)){ *w='\0'; return c; } for(;--lim>0;w++) if(!isalnum(*w=getch())){ ungetch(*w); break; } *w='\0'; return word[0]; } char *strdup(char *); struct tnode *addtree(struct tnode *p,char *w) { int cond; if(p==NULL){ p=(struct tnode *)malloc(sizeof(struct tnode)); p->word=strdup(w); p->count=1; p->left=p->right=NULL; }else if((cond=strcmp(w,p->word))==0) p->count++; else if(cond<0) p->left=addtree(p->left,w); else p->right=addtree(p->right,w); return p; } char *strdup(char *s) { char *p; p=(char *)malloc(strlen(s)+1); if(p!=NULL) strcpy(p,s); return p; } void treeprint(struct tnode *p) { if(p!=NULL){ treeprint(p->left); printf("%4d %s\n",p->count,p->word); treeprint(p->right); } } 其中addtree函数用了递归函数调用。 这是一个很经典的结构嵌套程序。 |
|
|