heap
BST
algorithm
conversion
data structures

Converting a heap to a BST in On time?

Data Structures & Algorithms practice on Codemia

Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.

Practice algorithms

Converting a heap to a binary search tree (BST) is an intriguing problem in computer science because of the distinct structural and functional properties of both data structures. A heap is a complete binary tree, typically used to implement priority queues, where the key at each node is either greater than or equal to (max-heap) or less than or equal to (min-heap) the keys of its children. In contrast, a BST is a binary tree where the left child's key is less than the parent's key, and the right child's key is greater than the parent's key. This article explores how to convert a heap to a BST in O(n)O(n) time, while also ensuring that the resulting tree preserves the BST properties.

Efficient Conversion: Strategy Overview

The task of converting a heap to a BST involves reorganizing the elements to satisfy the order properties of a BST. The linear time solution typically consists of the following steps:

  1. Heap traversal and extraction: Perform a level-order or inorder traversal of the heap to extract the elements.
  2. Sorting: Sort the extracted elements. This can be done in O(nlog⁡n)O(n \log n) time using standard sorting algorithms like mergesort or quicksort, but to achieve O(n)O(n) time, we'll use the characteristics of an already implemented min-heap.
  3. BST construction: Build the BST using the sorted elements.

Detailed Steps

  1. Heap Traversal:
    Begin by traversing the heap to extract all elements. This step is computationally simple and is done in O(n)O(n) time since you only need to visit each element once. Usually, a breadth-first traversal (level-order) is used to achieve this efficiently.
    Example pseudo-code for extracting elements from a heap:
  • Balancing the BST: The approach ensures that the BST is balanced by construction. A balanced BST typically offers O(log⁡n)O(\log n) average time complexity for operations such as insertion, deletion, and search.
  • Heap Type Impact: Whether dealing with a min-heap or max-heap fundamentally impacts only the sorting step, as the traversal and extraction strategies remain unchanged.
  • Space Complexity: While the algorithm achieves O(n)O(n) time complexity, it uses O(n)O(n) extra space for auxiliary data structures such as the list for extracted elements and the sorted array.
  • Complexity Analysis: Sorting using counting sort is contingent on small integer ranges. For more general cases or non-integers, sticking with an O(nlog⁡n)O(n \log n) algorithm may be necessary.

Related reading
Course
Intermediate
27 lessons
15 hours
DSA Fundamentals

Master algorithmic patterns and data structures through hands-on LeetCode-style problems - from arrays and hashing to dynamic programming and advanced graphs.

View the course
Track what you have practised

A free account saves your progress, solutions and study plan across every problem on Codemia.

Data Structures & Algorithms practice on Codemia

Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.

Practice algorithms