zoukankan      html  css  js  c++  java
  • 堆的判断(codevs 2879)

    2879 堆的判断

     

     时间限制: 1 s
     空间限制: 32000 KB
     题目等级 : 黄金 Gold
     
     
    题目描述 Description

    堆是一种常用的数据结构。二叉堆是一个特殊的二叉树,他的父亲节点比两个儿子节点要大,且他的左右子树也是二叉堆。现在输入一颗树(用二叉树的数组表示,即a[i]的左儿子与右儿子分别为a[2i],a[2i+1]),要求判断他是否是一个堆。

    输入描述 Input Description

    一个整数N,表示结点数。

    第二行N个整数,表示每个结点代表的数字

    输出描述 Output Description

    如果是,输出‘Yes’

    否则输出‘No’

    样例输入 Sample Input

    5

    1 2 3 4 5

    样例输出 Sample Output

    No

    数据范围及提示 Data Size & Hint

    1<N<100

    数字在2^31以内

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #define M 210
    using namespace std;
    int flag,a[M],n;
    void tree(int x)
    {
        if(flag)return;
        if(a[2*x])
        {
            if(a[2*x]<a[x])tree(2*x);
            else
            {
                flag=1;
                return;
            }
        }
        else return;
        if(a[2*x+1])
        {
            if(a[2*x+1]<a[x])tree(2*x+1);
            else
            {
                flag=1;
                return;
            }
        }
        else return;
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
          scanf("%d",&a[i]);
        tree(1);
        if(flag)printf("No");
        else printf("Yes");
        return 0;
    }
    View Code
  • 相关阅读:
    SpringMVC中的适配器
    JVM的理解
    设计模式 特点比较
    AOP代理模式
    Spring配置补充
    MayBatis与Spring的整合
    增强和注解
    注入
    Mybatis的执行过程
    k8s认证与授权
  • 原文地址:https://www.cnblogs.com/harden/p/5621425.html
Copyright © 2011-2022 走看看