本菜鸡第一次写blogT T,开始好好学习。
输入输出使用了C++的iostream。
题目描述
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
思路
( 2021/06/02:oj上似乎新增了一个案例,是像下图这样的父节点还没出现,它的孩子先出了,于是就先用另外一个结构体临时将数据保存起来,用sort函数根据父节点的数字编号排个序,其他照旧就可以了)
通过一个数组level记录每一个结点所在的层数,用结点对应数字作为下标进行存储。
结点的层数=父节点的层数+1,通过父结点的数字可以找到level数组中记录的父结点的层数。
用一个数组A存储每一层的结点个数。
在记录每一个结点的层数level时,level层的结点个数自增一。
用Max记录最大的层节点数。
并比较当前level的个数是否最大,更新Max。
代码
#include <iostream>
#include <algorithm>
using namespace std;
#define For(i,a,b) for(int i=a;i<b;i++