算法-完全二叉树的最大宽度和高度


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


提示:
默认第一个是根节点

以输入的次序为编号

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

代码如下:
#include "stdio.h" 
#include "string.h"   
int a[1000][2],b[1000];  
int i,n,x,y;   
void dfs(int i,int k)  
{  
    b[k]=b[k]+1;  
    if(k>x)  x=k;  
    if(a[i][1]!=0)  dfs(a[i][1],k+1);  
    if(a[i][2]!=0)  dfs(a[i][2],k+1);  
}  
int main()  
{  
    scanf("%d",&n);  
    memset(a,0,sizeof(a));  
    memset(b,0,sizeof(b));  
    for(i=1;i<=n;i++)  
        scanf("%d%d",&a[i][1],&a[i][2]);  
    x=0;  
    dfs(1,1);  
    y=0;  
    for(i=1;i<1000;i++)  
        if(b[i]>y)   y=b[i];  
    printf("%d %d",y,x);  
    return 0;  
}  


posted @ 2015-08-29 00:33  baalhuo  阅读(724)  评论(0编辑  收藏  举报