Divide at the middle
Time O(n) Space O(log n) recursionbuild(lo, hi): if lo > hi return null; mid = (lo + hi) / 2; node with nums[mid], left = build(lo, mid − 1), right = build(mid + 1, hi).
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
return build(nums, 0, nums.length - 1);
}
private TreeNode build(int[] nums, int lo, int hi) {
if (lo > hi) return null;
int mid = (lo + hi) >>> 1;
return new TreeNode(nums[mid], build(nums, lo, mid - 1), build(nums, mid + 1, hi));
}
}Verdict: Each element becomes one node.