Heap is a balanced binary tree with a special property of each node. There are two types of Heap; Max-Heap and Min-Heap.
Every node should be higher than its children. A node with the highest value should be root.
Every node should be lower than its children. A node with the lowest value should be root.
We want to able to get Left, Right, and Parent node on a heap. It can be represented much more efficiently by using an array. Let's say that the node is at the index. To get left, 2 x index + 1. To get right, 2 x index + 2. To get parent, (index - 1) / 2.
Heapify is the process of inserting or removing an element into the heap. It places an element to the wrong position then find the right position for it. There are two types of Heapify; Sift Up and Sift Down.
An element is in the wrong position as a leaf, it has to be moved upwards towards the root to find its right position.
An element is in the wrong position as root, it has to be moved downwards towards the leaves to find its right position.
In array, an element would be added at the very end, and then Sift Up.
In array, after removing the value of the index, move over the last element to the removed one, and then Sift Down.
It is easy to get as well as you know what the index is because it is an array and ordered.
The time complexity of Insert and Remove is Logarithmic, O (log n). But, for Access, it would be very fast, with time complexity is Constant, O(1).