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; } }