Symmetric Tree – Solution & Complexity

Solution Walkthrough

  1. Step 1: Recognize the Pattern

    The key pattern is: Parallel DFS that mirrors the left/right subtrees against each other. 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). Space: O(h) for the recursion stack (O(n) worst case on a skewed tree).

    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.

    def is_symmetric(root: TreeNode) -> bool:
        def mirror(t1, t2):
            if t1 is None and t2 is None:
                return True
            if t1 is None or t2 is None:
                return False
            return (
                t1.val == t2.val
                and mirror(t1.left, t2.right)
                and mirror(t1.right, t2.left)
            )
    
        return mirror(root, root)

FAQ