CODE[VS] 1501 二叉树最大宽度和高度

题目描述 Description

    给出一个二叉树,输出它的最大宽度和高度。

 

输入描述 Input Description

第一行一个整数n。

下面n行每行有两个数,对于第i行的两个数,代表编号为i的节点所连接的两个左右儿子的编号。如果没有某个儿子为空,则为0。

输出描述 Output Description

输出共一行,输出二叉树的最大宽度和高度,用一个空格隔开。

 

样例输入 Sample Input

5

2 3

4 5

0 0

0 0

0 0

样例输出 Sample Output

2 3

 

数据范围及提示 Data Size & Hint

n<16

默认第一个是根节点

以输入的次序为编号

2-N+1行指的是这个节点的左孩子和右孩子

注意:第二题有极端数据!

          1

          0 0

这题你们别想投机取巧了,给我老老实实搜索!

 

 

看看这个:https://www.cnblogs.com/shenben/p/5516842.html

 

然后理解一下宽度的意思,深度比较好理解了。

二叉树的宽度是指具有节点数最多的那一层的结点个数。

 

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cmath>
 5 #include<cstring> 
 6 using namespace std;
 7 
 8 int a[30][3],b[30];
 9 int n,x,y,k,wide,deep;
10 
11 int main()
12 {
13     scanf("%d",&n);
14     for(int i=1; i<=n; i++)
15     {
16         scanf("%d%d",&x,&y);
17         a[i][0]=x;
18         a[i][1]=y;
19         a[x][2]=i;
20         a[y][2]=i;
21     }
22     for(int i=1; i<=n; i++)
23     {
24         k=1;
25         x=a[i][2];
26         while(x!=0)
27         {
28             k++;
29             x=a[x][2];
30         }
31         b[k]++;
32         if(k>deep) deep=k;
33         if(b[k]>wide) wide=b[k];
34     }
35     printf("%d %d\n",wide,deep);
36     return 0;
37 }

 

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstring>
 6 using namespace std;
 7 
 8 int n,ans1,ans2;
 9 int fa[1002],deep[1002],wide[1002];
10 
11 struct node
12 {
13     int l,r;
14 } a[1002];
15 
16 void dfs(int now)
17 {
18     deep[now]=deep[fa[now]]+1;
19     ans2=max(ans2,deep[now]);
20     wide[deep[now]]++;
21     if(a[now].l ) 
22         dfs(a[now].l );
23     if(a[now].r )
24         dfs(a[now].r );
25 }
26 
27 int main()
28 {
29     scanf("%d",&n);
30     fa[1]=0;
31     for(int i=1; i<=n; ++i)
32     {
33         scanf("%d%d",&a[i].l ,&a[i].r );
34         fa[a[i].l ]=i;
35         fa[a[i].r ]=i;
36     }
37     dfs(1);
38     for(int i=1; i<=n; ++i)
39         ans1=max(ans1,wide[i]);
40     printf("%d %d",ans1,ans2);
41 }

 

 

 

 

 

posted @ 2018-06-06 19:44  孟东行#  阅读(226)  评论(0编辑  收藏  举报