/*
Time Complexity - O(n)
Space Complexity - O(log(n)) from stack space + O(n) output
Like merge sort but just the division part.
*/
var sortedArrayToBST = function (nums) {
// Recursive helper
function recurse(arr, start, end) {
if (start > end) return null
if (start === end) return new TreeNode(arr[start])
const mid = Math.floor((start + end) / 2),
subtreeRoot = new TreeNode(arr[mid])
subtreeRoot.left = recurse(arr, start, mid - 1)
subtreeRoot.right = recurse(arr, mid + 1, end)
return subtreeRoot
}
return recurse(nums, 0, nums.length - 1)
}
function TreeNode(val, left, right) {
this.val = val === undefined ? 0 : val
this.left = left === undefined ? null : left
this.right = right === undefined ? null : right
}