Binary Heap: It's commonly used to implement the priority queue. We can use a vector/array to represent the binary heap. It has the following properties:
1. The values of children >= its parent
2. It's a complete tree where every level is filled except for the last level. The last level is filled up from the left to right.
3. Each node has at most two children (left and right).
API explanation:
1. Push: Push a value onto the heap and then perform bubble-up - O(log(n))
2. Pop: Remove the first element from the heap and then perform bubble-down - O(log(n))
3. Clear Heap Clear the entire heap