LeetCode 0095. Unique Binary Search Trees II Solution in Java, Python, C++, JavaScript, Go & Rust | Explanation + Code

CoderIndeed
0
0095. Unique Binary Search Trees II

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

Solutions

Solution 1: DFS (Depth-First Search)

We design a function dfs(i, j) that returns all feasible binary search trees composed of [i, j], so the answer is dfs(1, n).

The execution steps of the function dfs(i, j) are as follows:

  1. If i > j, it means that there are no numbers to form a binary search tree at this time, so return a list consisting of a null node.
  2. If i ≤ j, we enumerate the numbers v in [i, j] as the root node. The left subtree of the root node v is composed of [i, v - 1], and the right subtree is composed of [v + 1, j]. Finally, we take the Cartesian product of all combinations of the left and right subtrees, i.e., left × right, add the root node v, and get all binary search trees with v as the root node.

The time complexity is O(n × G(n)), and the space complexity is O(n × G(n)). Where G(n) is the Catalan number.

PythonJavaC++GoTypeScriptRust
# 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 dfs(i: int, j: int) -> List[Optional[TreeNode]]: if i > j: return [None] ans = [] for v in range(i, j + 1): left = dfs(i, v - 1) right = dfs(v + 1, j) for l in left: for r in right: ans.append(TreeNode(v, l, r)) return ans return dfs(1, n)(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !