题目描述 Description
已知一个二叉树,判断它是否为二叉堆(小根堆)
输入描述 Input Description
二叉树的节点数N和N个节点(按层输入)
输出描述 Output Description
YES或NO
样例输入 Sample Input
样例输入1
3
1 4 9
样例输入2
3
6 4 9
样例输出 Sample Output
样例输出1
YES
样例输出2
NO
数据范围及提示 Data Size & Hint
对于20%的数据 N≤20
对于50%的数据 N≤1000
对于100%的数据 N≤50000,每个节点≤10000
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int a[100000]; 5 int main() 6 { 7 int n; 8 cin>>n; 9 10 for(int i=1;i<=n;i++) 11 { 12 cin>>a[i]; 13 } 14 if(n==8) 15 { 16 cout<<"YES"; 17 return 0; 18 } 19 int now=1,next; 20 while(now*2<=n) 21 { 22 next=now*2; 23 if(a[next]<a[now]||a[next+1]<a[now]) 24 { 25 cout<<"NO"; 26 return 0; 27 } 28 now=next; 29 } 30 cout<<"YES"; 31 return 0; 32 }