Skip to content

95. Unique Binary Search Trees II

Difficulty Topics

Description

Given an integer n, return all the structurally unique BST's (binary search trees), which has exactly n nodes of unique values from 1 to n. Return the answer in any order.

 

Example 1:

Input: n = 3
Output: [[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]

Example 2:

Input: n = 1
Output: [[1]]

 

Constraints:

  • 1 <= n <= 8

Solution

unique-binary-search-trees-ii.py
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def generateTrees(self, n: int) -> List[Optional[TreeNode]]:

        def generate(start, end):
            res = []

            if start > end:
                res.append(None)

            for index in range(start, end + 1):
                left = generate(start, index - 1)
                right = generate(index + 1, end)

                for l in left:
                    for r in right:
                        node = TreeNode(index, l, r)
                        res.append(node)

            return res

        return generate(1, n)