1501 二叉树最大宽度和高度——http://codevs.cn/problem/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

这题你们别想投机取巧了,给我老老实实搜索!(稍微注意一下就好了)

第二部分:思路

把节点用二维数组存储,同时记录子节点编号以及子节点所在行号,具体见代码注释

第三部分:代码

#include<stdio.h>
int main()
{
    //二维数组中每一行表示一个根节点以及它的子节点,还有一个表示它的子节点所在行号
    int n,i,s[32][4],len=0,x,y,height=1,j;//二维数组存储二叉树各节点以及它的子节点
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        s[len][0]=i+1;//根节点编号
        scanf("%d %d",&x,&y); //存储各根节点的子节点
        s[len][1]=x;//左节点
        s[len][2]=y;//右节点
        if(i==0)//如果i=0表示这是编号为1的根节点的子节点,那么它的子节点肯定在第2行
        {
            s[len++][3]=2;
        }
        else
        {
            //既然存在子节点,那么这个根节点肯定是某个节点的子节点,找到它,就知道
            //该根节点在第几行,那么它的子节点就在下一行。
            for(j=0;j<len;j++)
            {
                if(s[j][1]==i+1||s[j][2]==i+1)
                {
                    s[len++][3]=s[j][3]+1;
                    break;
                }
            }
        }
    }
    int sum,max=1;//max表示最大宽度,为什么初始为1呢,正如题目所说至少有一个根节点
    //计算最大宽度,高度
    //最大宽度:就是同一行上最多有多少个节点,高度就是有多少行的宽度是正数
    for(i=1;i<=n;i++)
    {
        sum=0;
        for(j=0;j<len;j++)
        {
            if(s[j][3]==i)
            {
                if(s[j][1]!=0)
                {
                    sum++;
                }
                if(s[j][2]!=0)
                {
                    sum++;
                }
            }
        }
        if(max<sum)
        {
            max=sum;
        }
        if(sum!=0)
        {
            height++;
        }
    }
    printf("%d %d\n",max,height);
    return 0;

}
时间: 2024-12-19 08:55:10

1501 二叉树最大宽度和高度——http://codevs.cn/problem/1501/的相关文章

codevs——1501 二叉树最大宽度和高度

1501 二叉树最大宽度和高度 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 给出一个二叉树,输出它的最大宽度和高度. 输入描述 Input Description 第一行一个整数n. 下面n行每行有两个数,对于第i行的两个数,代表编号为i的节点所连接的两个左右儿子的编号.如果没有某个儿子为空,则为0. 输出描述 Output Description 输出共一行,输出二叉树的最大宽度和高度,用一个空格隔开. 样例输入

1501 二叉树最大宽度和高度(codevs)

1501 二叉树最大宽度和高度 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 给出一个二叉树,输出它的最大宽度和高度. 输入描述 Input Description 第一行一个整数n. 下面n行每行有两个数,对于第i行的两个数,代表编号为i的节点所连接的两个左右儿子的编号.如果没有某个儿子为空,则为0. 输出描述 Output Description 输出共一行,输出二叉树的最大宽度和高度,用一个空格隔开. 样例输入 Sa

CODEVS 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 数据范

codevs 1501 二叉树最大宽度和高度x

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

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 数据范

2018.3.26 1501 二叉树最大宽度和高度

题目描述 给出一个二叉树,输出它的最大宽度和高度. 输入描述 第一行一个整数n.下面n行每行有两个数,对于第i行的两个数,代表编号为i的节点所连接的两个左右儿子的编号.如果没有某个儿子为空,则为0. 输出描述 输出共一行,输出二叉树的最大宽度和高度,用一个空格隔开. #include<stdio.h> int a[30], b[30]; //编译器行为开辟a[0] = 0 int main() { int n, l, r, k, x,kk, wide = 0, deep = 0; scanf(

ACM题目————二叉树最大宽度和高度

http://codevs.cn/problem/1501/ 题目描述 Description 给出一个二叉树,输出它的最大宽度和高度. 输入描述 Input Description 第一行一个整数n. 下面n行每行有两个数,对于第i行的两个数,代表编号为i的节点所连接的两个左右儿子的编号.如果没有某个儿子为空,则为0. 输出描述 Output Description 输出共一行,输出二叉树的最大宽度和高度,用一个空格隔开. 样例输入 Sample Input 5 2 3 4 5 0 0 0 0

10.二叉树最大宽度和高度

二叉树最大宽度和高度 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 查看运行结果 题目描述 Description 给出一个二叉树,输出它的最大宽度和高度. 输入描述 Input Description 第一行一个整数n. 下面n行每行有两个数,对于第i行的两个数,代表编号为i的节点所连接的两个左右儿子的编号.如果没有某个儿子为空,则为0. 输出描述 Output Description 输出共一行,输出二叉树的最大宽度和高度,用一个空格隔开. 样例

codevs http://www.codevs.cn/problem/?problemset_id=1 循环、递归、stl复习题

12.10高一练习题 1.要求: 这周回顾复习的内容是循环.递归.stl. 不要因为题目简单就放弃不做,现在就是练习基础. 2.练习题: (1)循环   题目解析与代码见随笔分类  NOI题库 http://noi.openjudge.cn/ch0106/    10-15题 http://noi.openjudge.cn/ch0105/     37-45题 http://noi.openjudge.cn/ch0107/     28-35题 (2)递归   题目解析与代码见随笔分类 递归 h