18924 二叉树的宽度
时间限制:1000MS 代码长度限制:10KB
提交次数:0 通过次数:0
Description:二叉树的宽度指的是具有节点数目最多的那一层的节点个数。
1
/ \
2 3
/
4
答案为2, 第二层节点数最多,为2个节点。
输入格式
共n行。 第一行一个整数n,表示有n个结点,编号为1至n。(1<=n<=50)
第二行至第n行,每行有两个整数x和y,表示在二叉树中x为y的父节点。x第一次出现时y为左孩子
输出格式
输出二叉树的宽度。
输入样例
5
1 2
1 3
2 4
2 5
输出样例
2
代码实现:
#include <stdio.h>
int a[51]={0};
typedef struct BiTNode
{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void Traverse(BiTree T,int a[],int k)
{
if(T)
{
a[k]++;
Traverse(T->lchild,a,k+1);
Traverse(T->rchild,a,k+1);
}
}
int main()
{
int n;
scanf("%d",&n);
BiTree T[n+1];
for(int i=1;i<=n;i++)
{
T[i]=new BiTNode;
T[i]->data=i;
T[i]->lchild=NULL;
T[i]->rchild=NULL;
}
for(int i=1;i<n;i++)
{
int e1,e2;
scanf("%d %d",&e1,&e2);
if(T[e1]->lchild==NULL) T[e1]->lchild=T[e2];
else T[e1]->rchild=T[e2];
}
int k=1;
Traverse(T[1],a,k);
int max=0;
for(int i=1;i<=50;i++)
{
if(a[i]>max) max=a[i];
}
printf("%d",max);
return 0;
}