堆的判断
1000(ms)
10000(kb)
2096 / 5077
编写程序判断以下给出的整数序列是否为最小堆。
输入
第一行是元素的个数n;
第二行是n个整数序列。
输出
如果是小根堆,输出Yes,否者输出No。
样例输入
10
100 86 48 73 35 39 42 57 66 21
样例输出
No
#include<stdio.h>
int n,data[100];
int t=0;
void sift()
{
for(int i=1;i<=n;i++)//依次判断该点的左右孩子是否小于该点
{
int j=i*2;
if(j<n&&(data[i]>data[j]||data[i]>data[j+1]))//如果该点的左右孩子大于该点 ,则不是小根堆
{
t=1;
}
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&data[i]);
sift();
if(t==0) printf("Yes");
else printf("No");
}