Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
Solution:
1 /** 2 * Definition for binary tree 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */ 10 public class Solution { 11 public TreeNode sortedArrayToBST(int[] num) { 12 if (num.length==0) 13 return null; 14 15 int end = num.length-1; 16 TreeNode root = sortedArrayToBSTRecur(num,0,end); 17 return root; 18 } 19 20 public TreeNode sortedArrayToBSTRecur(int[] num, int head, int end){ 21 if (head==end){ 22 TreeNode root = new TreeNode(num[head]); 23 return root; 24 } 25 26 if (head+1==end){ 27 TreeNode root = new TreeNode(num[end]); 28 TreeNode child = new TreeNode(num[head]); 29 root.left = child; 30 return root; 31 } 32 33 //Calculate the median index. 34 int len = end-head; 35 int mid = head + len/2 + len%2; 36 TreeNode root = new TreeNode(num[mid]); 37 TreeNode leftChild = sortedArrayToBSTRecur(num,head,mid-1); 38 TreeNode rightChild = sortedArrayToBSTRecur(num,mid+1,end); 39 root.left = leftChild; 40 root.right = rightChild; 41 return root; 42 } 43 }