Create a balanced BST using vector in C++ STL - GeeksforGeeks

29 Dec, 2021
Given an unsorted vector arr, the task is to create a balanced binary search tree using the elements of the array.
Note: There can be more than one balanced BST. Forming any is acceptable
Examples:  
Input: arr[] = { 2, 1, 3}Output: 2 1 3Explanation: The tree formed is show below. The preorder traversal is 2 1 3     2   /  \ 1    3  
Input: arr[] = {4, 3, 1, 2}Output: 2 1 3 4Explanation: The tree formed is        2      /  \    1    3           \            4Another possible option can provide preorder traversal is 3 2 1 4
Approach: To solve this problem, follow the below steps:
Firstly, we will sort the vector using the sort function.Now, get the Middle of the vector and make it root.Recursively do the same for the left half and the right half.Get the middle of the left half and make it the left child of the root created in step 2.Get the middle of the right half and make it the right child of the root created in step 2.
Firstly, we will sort the vector using the sort function.
Now, get the Middle of the vector and make it root.
Recursively do the same for the left half and the right half.Get the middle of the left half and make it the left child of the root created in step 2.Get the middle of the right half and make it the right child of the root created in step 2.
Get the middle of the left half and make it the left child of the root created in step 2.Get the middle of the right half and make it the right child of the root created in step 2.
Get the middle of the left half and make it the left child of the root created in step 2.
Get the middle of the right half and make it the right child of the root created in step 2.
Below is the implementation of the above approach:
C++
// C++ program to print BST in given range#include <bits/stdc++.h>using namespace std;  // Node of Binary Search Treeclass Node {public:    Node* left;    int data;    Node* right;      Node(int d)    {        data = d;        left = right = NULL;    }};  // A function that constructs Balanced// Binary Search Tree from a vectorNode* createBST(vector<int> v, int start,                 int end){    sort(v.begin(), v.end());      // Base Case    if (start > end)        return NULL;      // Get the middle element and make it root    int mid = (start + end) / 2;    Node* root = new Node(v[mid]);      // Recursively construct the left subtree    // and make it left child of root    root->left = createBST(v, start, mid - 1);      // Recursively construct the right subtree    // and make it right child of root    root->right = createBST(v, mid + 1, end);      return root;}  vector<int> preNode, vec;  // A utility function to print// preorder traversal of BSTvector<int> preOrder(Node* node){    // Root Left Right    if (node == NULL) {        return vec;    }    preNode.push_back(node->data);    preOrder(node->left);    preOrder(node->right);    return preNode;}  // Driver Codeint main(){    vector<int> v = { 4, 3, 1, 2 };    Node* root = createBST(v, 0, v.size() - 1);      vector<int> ans = preOrder(root);    for (auto i : ans) {        cout << i << " ";    }    return 0;}
PreOrder Traversal of constructed BST 
4 2 1 3 6 5 7 
Time Complexity: O(N * logN)Auxiliary Space: O(N) to create the tree
Algo-Geek 2021
BST
cpp-vector
STL
Algo Geek
Binary Search Tree
C++
Tree
Binary Search Tree
Tree
STL
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Lexicographically smallest string formed by concatenating any prefix and its mirrored form
Check if the given string is valid English word or not
Check if an edge is a part of any Minimum Spanning Tree
Divide given number into two even parts
Find One’s Complement of an Integer | Set 2
Binary Search Tree | Set 1 (Search and Insertion)
Binary Search Tree | Set 2 (Delete)
AVL Tree | Set 1 (Insertion)
A program to check if a binary tree is BST or not
Sorted Array to Balanced BST