数据结构实验之二叉树三:统计叶子数
Description
已知二叉树的一个按先序遍历输入的字符序列,如abc,,de,g,,f,,, (其中,表示空结点)。请建立二叉树并求二叉树的叶子结点个数。
Input
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。
Output
输出二叉树的叶子结点个数。
Sample
Input
abc,,de,g,,f,,,
Output
3
Hint
代码:
#include<bits/stdc++.h>
using namespace std;
typedef struct Tnode
{
char data;
struct Tnode *lchild;
struct Tnode *rchild;
}Tnode, *Tlink;
char s[55];
int l;
int sum;
int leaf;
Tlink createtree(struct Tnode *root)
{
if(sum == l) return NULL;
char c = s[sum++];
if(c == ',') return NULL;
if(root == NULL)
{
root = new Tnode;
root -> data = c;
root -> lchild = NULL;
root -> rchild = NULL;
}
root -> lchild = createtree(root -> lchild);
root -> rchild = createtree(root -> rchild);
return root;
}
void inorder(Tlink root)
{
if(root == NULL)
{
return ;
}
else
{
inorder(root->lchild);
if(root -> lchild == NULL && root -> rchild == NULL)
leaf++;
inorder(root->rchild);
}
}
int main()
{
while(~scanf("%s",s))
{
l = strlen(s);
sum = 0;
leaf = 0;
Tlink root = NULL;
root = createtree(root);
inorder(root);
cout << leaf << endl;
}
return 0;
}