判断判断输入的一组数是否满足堆的特性。这组数以-1结束,是堆,输出1,否则输出0。
#include<iostream>
#include<vector>
using namespace std;
int isHeap(int a[], int n) {
if (n == 0) return 0;
else {
int p, c1, c2;
for (p = (n - 2) / 2; p >= 0; --p) { // 判断是否小顶堆
c1 = 2 * p + 1;
c2 = 2 * p + 2;
if (c1 < n && c2 < n) { // 有两个孩子
if (a[c1] <= a[p] && a[c2] <= a[p]) continue;
else break;
}
else if (c1 < n && c2 >= n) { // 有一个孩子
if (a[c1] <= a[p]) continue;
else break;
}
}
if (p < 0) return 1;
for (p = (n - 2) / 2; p >= 0; --p) { // 判断是否大顶堆
c1 = 2 * p + 1;
c2 = 2 * p + 2;
if (c1 < n && c2 < n) { // 有两个孩子
if (a[c1] >= a[p] && a[c2] >= a[p]) continue;
else return 0;
}
else if (c1 < n && c2 >= n) { // 有一个孩子
if (a[c1] >= a[p]) continue;
else return 0;
}
}
return 1;
}
}
int main() {
int i, n, num;
int a[100];
for (i = 0; cin >> num && num != -1; ++i) {
a[i]=num;
}
n = i;
cout << isHeap(a, n);
return 0;
}