码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树最大宽度和高度

时间:2014-12-17 00:14:42      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   ar   io   color   os   sp   

题目描述 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

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

思路 dfs搜索。。。

bubuko.com,布布扣
 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 int a[20][2],s[20];//a存二叉树,s[i]存第i层的节点数(宽度)
 5 int i,n,x,y;
 6 
 7 void dfs(int i,int k)//k为层数,先序遍历
 8 {
 9     s[k]=s[k]+1;
10     if(k>x)    x=k;
11     if(a[i][1]!=0)    dfs(a[i][1],k+1);
12     if(a[i][2]!=0)    dfs(a[i][2],k+1);
13 }
14 
15 int main()
16 {
17     scanf("%d",&n);
18     memset(a,0,sizeof(a));
19     memset(s,0,sizeof(s));
20     for(i=1;i<=n;i++)
21         scanf("%d%d",&a[i][1],&a[i][2]);
22     x=0;
23     dfs(1,1);
24     y=0;
25     for(i=1;i<=n;i++)
26         if(s[i]>y)    y=s[i];
27     printf("%d %d",y,x);
28     return 0;
29 }
View Code

 

二叉树最大宽度和高度

标签:des   style   blog   http   ar   io   color   os   sp   

原文地址:http://www.cnblogs.com/ganhang-acm/p/4168330.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!