#include<bits/stdc++.h>
using namespace std;
class MinHeap {
public:
int *arr;
int size{0};
int capacity{1000};
MinHeap() {
arr = new int[capacity];
size = 0;
}
~MinHeap() {
delete[] arr;
arr = nullptr;
size = 0;
}
int leftchild(int node) {
int ans = 2 * node + 1;
return ans >= size ? -1 : ans;
}
int rightchild(int node) {
int ans = 2 * node + 2;
return ans >= size ? -1 : ans;
}
int parent(int node) {
return node == 0 ? -1 : (node - 1) / 2;
}
//Problem 4
bool isHeap(int *arr, int size){
//only non leaf
for (int i = 0; i < size / 2; i++) {
int left = leftchild(i);
int right = rightchild(i);
if (left < size && arr[i] > arr[left]) return false;
if (right < size && arr[i] > arr[right]) return false;
}
return true;
}
};
int main(){
MinHeap h;
int heap1[] = {1, 3, 5, 7, 9, 6, 8}; // Min Heap ✅
int heap2[] = {10, 20, 30, 40, 50, 60, 70}; // Min Heap ✅
int notHeap[] = {10, 5, 15, 20, 25, 30, 35}; // Not a Heap ❌
cout << boolalpha <<h.isHeap(heap1, 7) << "\n";
cout <<boolalpha<< h.isHeap(heap2, 7) << "\n";
cout <<boolalpha<< h.isHeap(notHeap, 7) << "\n";
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIE1pbkhlYXAgewpwdWJsaWM6CiAgICBpbnQgKmFycjsKICAgIGludCBzaXplezB9OwogICAgaW50IGNhcGFjaXR5ezEwMDB9OwoKICAgIE1pbkhlYXAoKSB7CiAgICAgICAgYXJyID0gbmV3IGludFtjYXBhY2l0eV07CiAgICAgICAgc2l6ZSA9IDA7CiAgICB9CgogICAgfk1pbkhlYXAoKSB7CiAgICAgICAgZGVsZXRlW10gYXJyOwogICAgICAgIGFyciA9IG51bGxwdHI7CiAgICAgICAgc2l6ZSA9IDA7CiAgICB9CgogICAgaW50IGxlZnRjaGlsZChpbnQgbm9kZSkgewogICAgICAgIGludCBhbnMgPSAyICogbm9kZSArIDE7CiAgICAgICAgcmV0dXJuIGFucyA+PSBzaXplID8gLTEgOiBhbnM7CiAgICB9CgogICAgaW50IHJpZ2h0Y2hpbGQoaW50IG5vZGUpIHsKICAgICAgICBpbnQgYW5zID0gMiAqIG5vZGUgKyAyOwogICAgICAgIHJldHVybiBhbnMgPj0gc2l6ZSA/IC0xIDogYW5zOwogICAgfQoKICAgIGludCBwYXJlbnQoaW50IG5vZGUpIHsKICAgICAgICByZXR1cm4gbm9kZSA9PSAwID8gLTEgOiAobm9kZSAtIDEpIC8gMjsKICAgIH0KCiAgIAogICAgCiAgICAvL1Byb2JsZW0gNAogICAgYm9vbCBpc0hlYXAoaW50ICphcnIsIGludCBzaXplKXsKICAgICAgICAvL29ubHkgbm9uIGxlYWYKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemUgLyAyOyBpKyspIHsgIAogICAgICAgIGludCBsZWZ0ID0gbGVmdGNoaWxkKGkpOwogICAgICAgIGludCByaWdodCA9IHJpZ2h0Y2hpbGQoaSk7CgogICAgICAgIGlmIChsZWZ0IDwgc2l6ZSAmJiBhcnJbaV0gPiBhcnJbbGVmdF0pIHJldHVybiBmYWxzZTsgIAogICAgICAgIGlmIChyaWdodCA8IHNpemUgJiYgYXJyW2ldID4gYXJyW3JpZ2h0XSkgcmV0dXJuIGZhbHNlOyAKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9Cn07CmludCBtYWluKCl7CiAgIAogICAgTWluSGVhcCBoOwogICAgaW50IGhlYXAxW10gPSB7MSwgMywgNSwgNywgOSwgNiwgOH07ICAvLyBNaW4gSGVhcCDinIUKICAgIGludCBoZWFwMltdID0gezEwLCAyMCwgMzAsIDQwLCA1MCwgNjAsIDcwfTsgLy8gTWluIEhlYXAg4pyFCiAgICBpbnQgbm90SGVhcFtdID0gezEwLCA1LCAxNSwgMjAsIDI1LCAzMCwgMzV9OyAvLyBOb3QgYSBIZWFwIOKdjAoKICAgIGNvdXQgPDwgYm9vbGFscGhhIDw8aC5pc0hlYXAoaGVhcDEsIDcpIDw8ICJcbiI7IAogICAgY291dCA8PGJvb2xhbHBoYTw8IGguaXNIZWFwKGhlYXAyLCA3KSA8PCAiXG4iOyAKICAgIGNvdXQgPDxib29sYWxwaGE8PCBoLmlzSGVhcChub3RIZWFwLCA3KSA8PCAiXG4iOyAKICAgIHJldHVybiAwOwp9