主题:[原创]二分树问题
这是程序代码:
#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函数用了递归函数调用。
这是一个很经典的结构嵌套程序。
#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函数用了递归函数调用。
这是一个很经典的结构嵌套程序。