[LeetCode] Problem 108 - Convert Sorted Array to Binary Search Tree

Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.

Example

Given the sorted array: [-10,-3,0,5,9],

One possible answer is: [0,-3,9,-10,null,5], which represents the following height balanced BST:

1
2
3
4
5
     0
/ \
-3 9
/ /
-10 5

Code

1
2
3
4
5
6
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// O(n) runtime, O(log n) stack space
public TreeNode sortedArrayToBST(int[] nums) {
if (nums == null || nums.length < 1)
return null;

return sortedArrayToBSTHelper(nums, 0, nums.length - 1);
}

private TreeNode sortedArrayToBSTHelper(int[] nums, int start, int end) {
if (start > end)
return null;

if (start == end)
return new TreeNode(nums[start]);

int mid = (start + end) >> 1;

TreeNode root = new TreeNode(nums[mid]);

root.left = sortedArrayToBSTHelper(nums, start, mid - 1);
root.right = sortedArrayToBSTHelper(nums, mid + 1, end);

return root;
}