zoukankan      html  css  js  c++  java
  • 堆的判断

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

    按大根堆的定义来就行。

    代码实现:

     1 #include<cstdio>
     2 int n;
     3 long long s[120];
     4 bool pd(int k){
     5     if(k!=1&&s[k]>s[k/2]) return 0;
     6     if(k*2<=n&&!pd(k*2)) return 0;
     7     if(k*2+1<=n&&!pd(k*2+1)) return 0;
     8     return 1;
     9 }
    10 int main(){
    11     scanf("%d",&n);
    12     for(int i=1;i<=n;i++) scanf("%lld",&s[i]);
    13     if(pd(1)) printf("Yes
    ");
    14     else printf("No
    ");
    15     return 0;
    16 }

    很水的概念题,递归做法。

    题目来源:CODE[VS]

  • 相关阅读:
    显示多行字符串
    dowhile
    获取系统的相关文件夹
    DLL 实际应用版本
    ShellExecute
    LoadLibrary
    MFC DLL的创建
    在DLL中存放资源
    替换字符串
    RemoveDirectoryB
  • 原文地址:https://www.cnblogs.com/J-william/p/6238825.html
Copyright © 2011-2022 走看看