回 帖 发 新 帖 刷新版面

主题:[原创]二分树问题

这是程序代码:
#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函数用了递归函数调用。
这是一个很经典的结构嵌套程序。

回复列表 (共1个回复)

沙发

有没有图的经典实例咯
也巾贴一个出来

我来回复

您尚未登录,请登录后再回复。点此登录或注册