堆的判断 Posted 2020-08-25 鄉勇 tags: 篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆的判断相关的知识,希望对你有一定的参考价值。 时间限制: 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以内 按大根堆的定义来就行。 代码实现: 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\n"); 14 else printf("No\n"); 15 return 0; 16 } 很水的概念题,递归做法。 以上是关于堆的判断的主要内容,如果未能解决你的问题,请参考以下文章 关于堆的判断 code vs 2879 堆的判断(堆的学习一) 2879 堆的判断 堆的判断(codevs 2879) PTA L2-4 关于堆的判断 堆的判断