C++ 二叉树的深度和宽度

有一颗二叉树,如下图:
 


 

此二叉树共有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;
}

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值