有一颗二叉树,如下图:
此二叉树共有7个结点①②③④⑤⑥⑦,并约定结点①为根结点,处在第一层。根结点①有2个孩子,左孩子为②,右孩子为③,并约定二叉树的一个结点最多有2个孩子。
二叉树可以用三元式表示,(结点 左孩子 右孩子)
对于上图的二叉树可以表示为:
上面二叉树的深度为4(即最大层次数),宽度为3(即,同一层上最多结点数)。
输入
第一行一个整数(1≤n≤30),即结点个数。
接下来 n行,每行三个数,即结点三元式
输出
输出一行,含二个整数,即二叉树深度和宽度,两个数之间用空格分隔.
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
int n,m;
int maxn1,maxn2;
int cnt[N];
vector<int > e[N];
void dfs(int now,int dep)
{
cnt[dep]++;
if(maxn1<dep) maxn1 = dep;
if(maxn2<cnt[dep]) maxn2 = cnt[dep];
int a = e[now][0],b = e[now][1];
if(a!=0) dfs(a,dep+1);
if(b!=0) dfs(b,dep+1);
}
int main()
{
cin>>n;
for(int i = 1;i<=n;i++)
{
int x,a,b;
cin>>x>>a>>b;
e[x].push_back(a);
e[x].push_back(b);
}
dfs(1,1);
cout<<maxn1<<" "<<maxn2;
return 0;
}