Description
二叉树的宽度指的是具有节点数目最多的那一层的节点个数。
1
/
2 3
/
4
答案为2, 第二层节点数最多,为2个节点。
输入格式
共n行。
第一行一个整数n,表示有n个结点,编号为1至n,结点1为树根。(1<=n<=50)
第二行至第n行,每行有两个整数x和y,表示在二叉树中x为y的父节点。x第一次出现时y为左孩子
输出格式
输出二叉树的宽度。
输入样例
5
1 2
1 3
2 4
2 5
输出样例
2
#include <iostream>
#include <queue>
#include <algorithm>
#include <string.h>
using namespace std;
int main()
{
int child[55][3];//二维数组,i为根节点,j为i的孩子节点
memset(child,0,sizeof(child)); //定义在mian函数里面的二维数组要清零
int n;
int x,y;
int ans=1; //初始宽度为1
cin>>n;
for(int i=1;i<n;i++)
{
cin>>x>>y;
if(!child[x][1])
child[x][1]=y;
else
child[x][2]=y;
}
queue<int> Q;
Q.push(1);//第一个节点入队
while(Q.size())
{
int len=Q.size();//队列的长度就是每一层的节点个数
ans=max(ans,len);
//把上一层的节点全部出队,节点的左右孩子入队
for(int i=0;i<len;i++)
{
int t=Q.front();
Q.pop();
if(child[t][1])
Q.push(child[t][1]);
if(child[t][2])
Q.push(child[t][2]);
}
}
cout<<ans<<endl;
}