描述
给定一棵二叉树,以二叉链表存储,要求输出该二叉树的叶子结点数。
部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码
int main()
{
Bitnode *t;
int n;
scanf("%d",&n);
while(n--)
{
t=CreatBitree_level();
printf("%d\n",leafs(t));
}
return 0;
}
输入
输入数据分为多组,第一行是测试数据的组数n,下面的n行分别代表一棵二叉树。每棵二叉树结点的值均为正整数,数据为0代表当前结点为空,数据为-1代表二叉树数据输入结束,-1不作处理。二叉树的构造按照层次顺序(即第1层1个整数,第2层2个,第3层4个,第4层有8个......,如果某个结点不存在以0代替)。
输出
输出每棵二叉树的叶子结点数。
样例输入
3
0 -1
1 -1
1 2 3 -1
样例输出
0
1
2
#include<stdio.h>
#include<stdlib.h>
typedef struct Bitnode
{
struct Bitnode *left,*right;
int data;
}Bitnode;
Bitnode *CreatBitree_level()
{
Bitnode *root=NULL;
Bitnode *qu[1001];
int x,front=0,tail=0;
while(scanf("%d",&x),x!=-1)
{
Bitnode *p;
if(x==0)
p=NULL;
else
{
p=(Bitnode*)malloc(sizeof(Bitnode));
p->data=x;
p->left=p->right=NULL;
}
qu[++tail]=p;
if(tail==1)
root=p;
else
{
if(qu[front]!=NULL&&p!=NULL)
{
if(tail%2==0)
qu[front]->left=p;
else
qu[front]->right=p;
}
}
if(tail%2==1)
front++;
} return root;
}
int leafs(Bitnode *t)
{
if(t==NULL)
return 0;
else if(t->left==NULL&&t->right==NULL)
return 1;
else
{
return leafs(t->left)+leafs(t->right);
}
}