Problem Description
已知二叉树的一个按先序遍历输入的字符序列,如abc,,de,g,,f,,, (其中,表示空结点)。请建立二叉树并求二叉树的叶子结点个数。
Input
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。
Output
输出二叉树的叶子结点个数。
Example Input
abc,,de,g,,f,,,
Example Output
3
#include<stdio.h> #include<string.h> #include<stdlib.h> #define OVERFLOW -2 #define ERROR -1 #define OK 1 typedef int Statu; typedef char Elemtype; Elemtype str[60]; int i, j; typedef struct Binode { Elemtype data; struct Binode *lchild, *rchild; }BiTnode, *BiTree; Statu CreatBitree(BiTree &T); int main() { BiTree T; while(gets(str)) { i = 0; j = 0; CreatBitree(T); printf("%d\n", j); } return 0; } Statu CreatBitree(BiTree &T) { if(str[i] != ',' && str[i + 1] == ',' && str[i + 2] == ',') j++; if(str[i++] == ',') T = NULL; else { T = (BiTree)malloc(sizeof(BiTnode)); T -> data = str[i - 1]; CreatBitree(T -> lchild); CreatBitree(T -> rchild); } return OK; }