Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
public TreeNode sortedArrayToBST(int[] num) {
if(num.length==0) return null;
return toBST(num, 0, num.length-1);
}
private TreeNode toBST(int[] num, int start, int end) {
if(start > end) {
return null;
}
int m = (start+end)>>1;
TreeNode node = new TreeNode(num[m]);
node.left = toBST(num, start, m-1);
node.right = toBST(num, m+1, end);
return node;
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
if(!nums.size()) return NULL;
int *arr = &nums[0];
return toBST(arr, nums.size());
}
TreeNode *toBST(int* nums, int n) {
if(n == 0) return NULL;
int m = n / 2;
TreeNode *root = new TreeNode(nums[m]);
root->left = toBST(nums, m);
root->right = toBST(nums+m+1, n-m-1);
return root;
}