1525.求二叉树第K层结点个数
时限:1000ms 内存限制:10000K 总时限:3000ms
Description
如果按照二叉树的顺序存储结构,逐个输入二叉树的结点值,(即按从上到下、从左至右的顺序,逐个输入结点值,对于空结点使用0表示),则一棵二叉树可以被一个序列唯一表示,如A表示一棵只有根结点的二叉树;A#C表示一个深度为2、根结点左子树为空的二叉树。请根据输入的二叉树的序列,创建二叉链表,并根据输入的层数L,计算并输出二叉树第L层结点的个数。
Input
第一行为二叉树中非空结点的个数K及要查找的层数L,1<=K<=2^10,L>=1;
第二行为按照顺序结构逐个输入的二叉查找树的n个结点值(包含空结点),n个结点值之间用空格隔开,1<=n<=2^10
Output
第一行为二叉树第L层的结点个数
第二行为空行
Sample Input
9 3
8 3 10 1 6 0 14 0 0 4 7 0 0 13
Sample Output
3
提示:建立二叉链表时,可以借助队列
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
typedef struct node
{
char data;
struct node*lchild;
struct node*rchild;
}BiTNode,*BiTree;
void creat(BiTree*root)
{
BiTree s;
BiTree Q[100];
int front=1,rear=0,n;
char ch;
while (ch != '\n')
{
scanf("%d",&n);
ch = getchar();
if(n==0) s=NULL;
else
{
s=(BiTree)malloc(sizeof(BiTNode));
s->data=n;
s->lchild=NULL;
s->rchild=NULL;
}
Q[++rear]=s;
if(rear==1) *root=s;
else
{
if(s&&Q[front])
{
if(rear%2==0) Q[front]->lchild=s;
else Q[front]->rchild=s;
}
if(rear%2==1) front++;
}
}
}
int num(BiTree root,int k)
{
if(root==NULL||k==0)
return 0;
if(root!=NULL&&k==1)
return 1;
return num(root->lchild,k-1)+num(root->rchild,k-1);
}
int main()
{
BiTree root;
int number;
int k;
int n;
scanf("%d",&number);
scanf("%d",&k);
creat(&root);
n=num(root,k);
printf("%d\n",n);
return 0;
}
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
typedef struct node
{
char data;
struct node*lchild;
struct node*rchild;
}BiTNode,*BiTree;
void creat(BiTree*root)
{
BiTree s;
BiTree Q[100];
int front=1,rear=0,n;
char ch;
while (ch != '\n')
{
scanf("%d",&n);
ch = getchar();
if(n==0) s=NULL;
else
{
s=(BiTree)malloc(sizeof(BiTNode));
s->data=n;
s->lchild=NULL;
s->rchild=NULL;
}
Q[++rear]=s;
if(rear==1) *root=s;
else
{
if(s&&Q[front])
{
if(rear%2==0) Q[front]->lchild=s;
else Q[front]->rchild=s;
}
if(rear%2==1) front++;
}
}
}
int num(BiTree root,int k)
{
if(root==NULL||k==0)
return 0;
if(root!=NULL&&k==1)
return 1;
return num(root->lchild,k-1)+num(root->rchild,k-1);
}
int main()
{
BiTree root;
int number;
int k;
int n;
scanf("%d",&number);
scanf("%d",&k);
creat(&root);
n=num(root,k);
printf("%d\n",n);
return 0;
}