堆的判斷
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");
}