标签:限制 for iostream 数据 ble 左右 ret std namespace
时间限制: 1 s
空间限制: 128000 KB
题目等级: 白银 Silver
给出一个二叉树,输出它的最大宽度和高度。
第一行一个整数n。
下面n行每行有两个数,对于第i行的两个数,代表编号为i的节点所连接的两个左右儿子的编号。如果没有某个儿子为空,则为0。
输出共一行,输出二叉树的最大宽度和高度,用一个空格隔开。
5
2 3
4 5
0 0
0 0
0 0
2 3
n<16默认第一个是根节点
/*
作者:Zforw
题目:p1501二叉树最大宽度和高度
*/
#include< cstdio >
#include< iostream>
using namespace std;
int l[30],r[30],fa[30],b[30];
int main(){
int n,x,y,k,wide = 0,deep = 0 ;
cin>>n;
for(int i = 1 ; i <= n; i ++
{
cin>>l[i]>>r[i]; //储存左右孩子
fa[l[i]]=fa[r[i]]=i;; //储存其父节点
}
for(int i = 1 ; i <= n; i ++){
k = 1 ;
x = fa[i];
while(x!= 0){
k++;
x = fa[x];
}
//从下向上找,一直找到根节点,k为深度
//b[k]保存深度为k的节点的个数
b[k]++;
deep=max(deep,k);
wide=max(wide,b[k]);
}
cout<<wide<<" "<<deep;
return 0 ;
}
标签:限制 for iostream 数据 ble 左右 ret std namespace
原文地址:https://www.cnblogs.com/Zforw/p/9435742.html