Convert Sorted Array to Binary Search Tree – Solution & Complexity

Solution Walkthrough

1. Recognize the Pattern

The key pattern is: divide and conquer that always roots the subtree at the middle element so both halves stay balanced. Identify the state and invariant before coding.

2. Build the Algorithm

Advance one state transition at a time. Mark or update state before exploring dependent work.

3. Check Edge Cases

Test empty or minimal input, skewed shapes, duplicates where allowed, and impossible outcomes.

4. Solution and Complexity

Time: O(n) — every element becomes exactly one node. Space: O(log n) for the recursion stack on a balanced tree, plus O(n) for the output tree itself.

All 5 languages below run and submit against the remote judge for this problem — Java/Go/Rust use the same real TreeNode structural-type support the judge added for the rest of the linked-list/tree track, and this is the first problem in the bank where TreeNode is the return type rather than only a parameter.

def sorted_array_to_bst(nums: list) -> TreeNode:
    if not nums:
        return None

    mid = len(nums) // 2
    root = TreeNode(nums[mid])
    root.left = sorted_array_to_bst(nums[:mid])
    root.right = sorted_array_to_bst(nums[mid + 1:])
    return root

FAQ