Convert Sorted Array to Binary Search Tree – Solution & Complexity

Solution Walkthrough

  1. Step 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. Step 2: Build the Algorithm

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

  3. Step 3: Check Edge Cases

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

  4. Step 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