西南科技大學OJ題 堆的判斷1098

堆的判斷

 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");
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章