package com.anuragkapur.ctci; import com.anuragkapur.ds.tree.BreadthFirstTraversal; import com.anuragkapur.ds.tree.TreeNode; /** * @author: anuragkapur * @since: 09/05/2014 */ public class Prob4_3_BSTWithMinHeight { public static TreeNode createBST(int a[], int startIndex, int endIndex) { if(a == null) { return null; } else if (endIndex - startIndex == 0){ TreeNode node1 = new TreeNode(a[startIndex]); return node1; }else if(endIndex - startIndex == 1) { TreeNode node1; if(a[startIndex] < a[endIndex]) { node1 = new TreeNode(a[startIndex]); TreeNode node2 = new TreeNode(a[endIndex]); node1.setRight(node2); } else { node1 = new TreeNode(a[startIndex]); TreeNode node2 = new TreeNode(a[endIndex]); node1.setLeft(node2); } return node1; } else { int middleIndex = (startIndex + endIndex) / 2; TreeNode node1 = new TreeNode(a[middleIndex]); TreeNode leftSubTree = createBST(a, startIndex, middleIndex - 1); TreeNode rightSubTree = createBST(a, middleIndex + 1, endIndex); node1.setLeft(leftSubTree); node1.setRight(rightSubTree); return node1; } } public static void main(String[] args) { int a[] = {1,2,3,4,5,6,7,8}; TreeNode rootNode = createBST(a, 0, a.length - 1); BreadthFirstTraversal.breadthFirst(rootNode); } }