数据结构实验之二叉树三:统计叶子数
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
已知二叉树的一个按先序遍历输入的字符序列,如abc,,de,g,,f,,, (其中,表示空结点)。请建立二叉树并求二叉树的叶子结点个数。
输入
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。
输出
输出二叉树的叶子结点个数。
示例输入
abc,,de,g,,f,,,
示例输出
3
提示
#include<iostream>
#include<cstring>
using namespace std;
char a[50];
int i;
int sum;
struct Tnode
{
char d;
Tnode *l,*r;
};
Tnode* CreatT()
{
Tnode *p;
if(a[i++]==',')
p=NULL;
else
{
p=new Tnode;
p->d=a[i-1];
p->l=CreatT();
p->r=CreatT();
}
return p;
}
void pre_order(Tnode *p)
{
if(p)
{
if(!p->l&&!p->r)
sum++;
pre_order(p->l);
pre_order(p->r);
}
}
int main()
{
while(cin>>a)
{
i=0;
sum=0;
Tnode *root;
root=CreatT();
pre_order(root);
cout<<sum<<endl;
}
}
#include<iostream>
#include<cstring>
using namespace std;
char a[50];
int i;
int sum;
struct Tnode
{
char d;
Tnode *l,*r;
};
Tnode* CreatT()
{
Tnode *p;
if(a[i++]==',')
p=NULL;
else
{
p=new Tnode;
p->d=a[i-1];
p->l=CreatT();
p->r=CreatT();
}
return p;
}
void pre_order(Tnode *p)
{
if(p)
{
if(!p->l&&!p->r)
sum++;
pre_order(p->l);
pre_order(p->r);
}
}
int main()
{
while(cin>>a)
{
i=0;
sum=0;
Tnode *root;
root=CreatT();
pre_order(root);
cout<<sum<<endl;
}
}