A Heap is a special Tree-based data structure in which the tree is a complete binary tree. Since a heap is a complete binary tree, a heap with **N** nodes has **log N** height. It is useful to remove the highest or lowest priority element. It is typically represented as an array. There are two types of Heaps in the data structure.

__Min-Heap__

In a Min-Heap the key present at the root node must be less than or equal among the keys present at all of its children. The same property must be recursively true for all sub-trees in that Binary Tree. In a Min-Heap the minimum key element present at the root. Below is the Binary Tree that satisfies all the property of Min Heap.

__Max Heap__

In a Max-Heap the key present at the root node must be greater than or equal among the keys present at all of its children. The same property must be recursively **true** for all sub-trees in that Binary Tree. In a Max-Heap the maximum key element present at the root. Below is the Binary Tree that satisfies all the property of Min Heap.

__Difference between Min Heap and Max Heap__

Min Heap | Max Heap | |
---|---|---|

1. | In a Min-Heap the key present at the root node must be less than or equal to among the keys present at all of its children. | In a Max-Heap the key present at the root node must be greater than or equal to among the keys present at all of its children. |

2. | In a Min-Heap the minimum key element present at the root. | In a Max-Heap the maximum key element present at the root. |

3. | A Min-Heap uses the ascending priority. | A Max-Heap uses the descending priority. |

4. | In the construction of a Min-Heap, the smallest element has priority. | In the construction of a Max-Heap, the largest element has priority. |

5. | In a Min-Heap, the smallest element is the first to be popped from the heap. | In a Max-Heap, the largest element is the first to be popped from the heap. |

__Applications of Heaps__:

- Heap Sort: Heap Sort is one of the best sorting algorithms that use Binary Heap to sort an array in
**O(N*log N)**time. - Priority Queue: A priority queue can be implemented by using a heap because it supports
**insert()**,**delete()**,**extractMax()**,**decreaseKey()**operations in**O(log N)**time. - Graph Algorithms: The heaps are especially used in Graph Algorithms like Dijkstra’s Shortest Path and Prim’s Minimum Spanning Tree.

__Performance Analysis of Min-Heap and Max-Heap__:

- Get Maximum or Minimum Element: O(1)
- Insert Element into Max-Heap or Min-Heap: O(log N)
- Remove Maximum or Minimum Element: O(log N)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more, please refer **Complete Interview Preparation Course****.**