已知二叉树的一个按先序遍历输入的字符序列,如abc,,de,g,,f,,, (其中,表示空结点)。请建立二叉树并求二叉树的叶子结点个数。
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。
输出二叉树的叶子结点个数。
abc,,de,g,,f,,,Example Output
3
#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct node{ char data; struct node *lc,*rc;}bitree;int i=-1;int ans;bitree * pre_create(char str[]){ bitree *t; if(str[++i]!=',') { t=(bitree *)malloc(sizeof(bitree)); t->data=str[i]; t->lc=pre_create(str); t->rc=pre_create(str); } else { t=NULL; } return t;}void pre_show(bitree * t){ if(t) { if(t->lc==NULL&&t->rc==NULL) { ans++; } pre_show(t->lc); pre_show(t->rc); }}int main(){ char str[101]; bitree * tree; while(scanf("%s",str)!=EOF) { i=-1; ans=0; tree=pre_create(str); pre_show(tree); printf("%d/n",ans); } return 0;}
新闻热点
疑难解答