這個程序來自k&r的《the c programming language 》第六章第五節(jié)
void treeprint(struct tnode *p)
{
if (p != NULL)
{
treeprint(p->left);
printf("%4d %s\n",p->count,p->word);
treeprint(p->right);
}
}
struct tnode{
char *word; /* point to a text */
int count; /* count the text ocurrence frequence */
struct tnode *left; /* left child */
struct tnode *right; /* right child */
};
**輸入下圖的中的這句話"now is the ....."
請問這個輸出為什么是這樣,它不應(yīng)該是按中序遍歷的結(jié)果打印嗎?
---------以下是程序全部代碼---------------------------
標(biāo)簽: 'tree.c'
struct tnode{
char *word; /* point to a text */
int count; /* count the text ocurrence frequence */
struct tnode *left; /* left child */
struct tnode *right; /* right child */
};
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define MAXWORD 100
struct tnode *addtree(struct tnode *, char *);
void treeprint(struct tnode *);
int getword(char *,int);
/* word frequency count */
int main()
{
struct tnode *root; /* root node */
char word[MAXWORD];
root = NULL;
while (getword(word, MAXWORD) != EOF)
if (isalpha(word[0]))
root = addtree(root, word);
treeprint(root);
return 0;
}
struct tnode *talloc(void);
char* my_strdup(const char *s);
/* addtree : add a node with w,at or below p */
struct tnode *addtree(struct tnode *p, char *w)
{
int cond;
if ( p == NULL) /* a new word has arrived */
{
p = talloc(); /* make a new node */
p->word = my_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;
}
void treeprint(struct tnode *p)
{
if (p != NULL)
{
treeprint(p->left);
printf("%4d %s\n",p->count,p->word);
treeprint(p->right);
}
}
struct tnode *talloc(void)
{
return (struct tnode *)malloc(sizeof(struct tnode));
}
char* my_strdup(const char *s)
{
char *p;
p = malloc(strlen(s)+1);
if (p != NULL)
strcpy(p, s);
return p;
}
標(biāo)簽: getword.c
#include<ctype.h>
int getword(char word, int lim)
{
int c;
int getch(void);
void ungetch(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];
}
標(biāo)簽: getch.c
#include<stdio.h>
#define BUFSIZE 100
char buf[BUFSIZE];
int bufcp = 0;
int getch(void)
{
int c;
if(bufcp > 0)
c = buf[--bufcp];
else
c = getchar();
return c;
}
void ungetch(int c)
{
if (bufcp < BUFSIZE)
buf[bufcp++] = c;
else
printf("error: the buf is over!\n");
}
getword函數(shù)就是用來讀入一個單詞
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。