diff --git a/DataStructures/Trees/CreateBSTFromSortedArray.java b/DataStructures/Trees/CreateBSTFromSortedArray.java new file mode 100644 index 000000000..f31e7928c --- /dev/null +++ b/DataStructures/Trees/CreateBSTFromSortedArray.java @@ -0,0 +1,45 @@ +package DataStructures.Trees; + +import DataStructures.Trees.BinaryTree.Node; + +/** + * Given a sorted array. Create a balanced binary search tree from it. + * + * Steps: + * 1. Find the middle element of array. This will act as root + * 2. Use the left half recursively to create left subtree + * 3. Use the right half recursively to create right subtree + */ +public class CreateBSTFromSortedArray { + + public static void main(String[] args) { + test(new int[]{}); + test(new int[]{1, 2, 3}); + test(new int[]{1, 2, 3, 4, 5}); + test(new int[]{1, 2, 3, 4, 5, 6, 7}); + } + + private static void test(int[] array) { + BinaryTree root = new BinaryTree(createBst(array, 0, array.length - 1)); + System.out.println("\n\nPreorder Traversal: "); + root.preOrder(root.getRoot()); + System.out.println("\nInorder Traversal: "); + root.inOrder(root.getRoot()); + System.out.println("\nPostOrder Traversal: "); + root.postOrder(root.getRoot()); + } + + private static Node createBst(int[] array, int start, int end) { + // No element left. + if (start > end) { + return null; + } + int mid = start + (end - start) / 2; + + // middle element will be the root + Node root = new Node(array[mid]); + root.left = createBst(array, start, mid - 1); + root.right = createBst(array, mid + 1, end); + return root; + } +}