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; }
本文介绍了一个基于先序遍历序列构建二叉树的方法,并通过递归实现来计算二叉树中叶子节点的数量。示例输入输出展示了算法的有效性。
1989

被折叠的 条评论
为什么被折叠?



