• 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

    数据范围及提示 Data Size & Hint

    n<16

    默认第一个是根节点

    以输入的次序为编号

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

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

              1

              0 0

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

     

    分类标签 Tags

     
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    
    using namespace std;
    
    int n,q,maxx=-1;
    int a[17],b[17],w[17];
    
    void qwq(int x,int y) {
        if(a[x]>0)//如果该数拥有左孩子 
        {
            w[y]++;//高度++ 
            qwq(a[x],y+1);//继续搜索下一层 
        }
        if(b[x]>0)//如果该数拥有右孩子
        {
            w[y]++;//高度++
            qwq(b[x],y+1);//继续搜索下一层
        }
        q=y>q?y:q;//y为二叉树的高度 ,记录下来取最大高度(深度)
    }
    
    int main() {
        scanf("%d",&n);
        for(int i=1; i<=n; i++) {
            cin>>a[i]>>b[i];//左右孩子 
        }
        if(n==1) {//极端数据 
            printf("%d %d",1,1);
            return 0;
        } else qwq(1,1);
        for(int i=1;i<=q;i++)
        {
            maxx=w[i]>maxx?w[i]:maxx;//取最大值 
        }
        printf("%d %d",maxx,q);
        return 0;
    }

    如果运气好也是错,那我倒愿意错上加错!

    ❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀

  • 相关阅读:
    echarts折线图
    利用echarts制作词云
    本周总结
    本周总结
    云服务器项目数据库连接超时问题解决
    iOS下载图片失败
    解决后台json数据返回的字段需要替换的问题
    设置User Agent
    Xcode升级到9.3之后pod问题
    gitLab创建自己的私有库
  • 原文地址:https://www.cnblogs.com/zxqxwnngztxx/p/6669569.html
Copyright © 2020-2023  润新知