DEV Community

Abhishek Chaudhary
Abhishek Chaudhary

Posted on

Unique Binary Search Trees II

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:

# 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 getTrees(self, beg, end):
        trees = []

        if beg > end:
            trees.append(None)
            return trees

        for i in range(beg, end + 1):
            left_subtrees = self.getTrees(beg, i - 1)
            right_subtrees = self.getTrees(i + 1, end)

            for l in left_subtrees:
                for r in right_subtrees:
                    tree = TreeNode(val = i, left = l, right = r)
                    trees.append(tree)
        return trees

    def generateTrees(self, n: int) -> List[Optional[TreeNode]]:
        return self.getTrees(1, n)
Enter fullscreen mode Exit fullscreen mode

Top comments (0)