# Create a balanced BST using vector in C++ STL

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

\

4

Another 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.

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 Tree ` `class` `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 vector ` `Node* 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 BST ` `vector<` `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 Code ` `int` `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; ` `}` |

**Output**

PreOrder Traversal of constructed BST 4 2 1 3 6 5 7

* Time Complexity:* O(N * logN)

*O(N) to create the tree*

**Auxiliary Space:**