二叉树的最大深度和最大宽度

来源:互联网 发布:redis清除所有数据 编辑:程序博客网 时间:2024/05/22 07:46

#include<cstdio>


int main()


{

   
int n,f[16] = {0},h = 1;

 
scanf("%d",&n);

   
f[1]=1;

 int a,b;

   
for(int i = 1;i <= n;++ i)//左右结点的深度(若存在)=当前结点的深度+1

   
{

       
scanf("%d%d",&a,&b);

       
if(a!=0)f[a]=f[i]+1;

       
if(b!=0)f[b]=f[i]+1;

   
}

   
for(int i = 1;i <= n;++ i)//寻找最大深度

     
if(f[i]>h)

       
h=f[i];

 
int k = 0,c = 1;

   
for(int i = 1;i <= n;++ i)//根据每一层的结点数比较找出最大宽度

   
{

       
for(int j = 1;j <= n;++ j)

         
if(f[j]==i)

           
k++;

       
if(k>c) c=k;

      
k=0;

   
}

   
printf("%d %d",c,h);

   
return 0;


}

0 0