In this post, we are going to solve the Unique Binary Search Trees II Leetcode Solution problem of Leetcode. This Leetcode problem is done in many programming languages like C++, Java, and Python.

Problem
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
Now, let’s see the leetcode solution of Unique Binary Search Trees II Leetcode Solution.
Unique Binary Search Trees II Leetcode Solution in Python
class Solution: def generateTrees(self, n: int) -> List[TreeNode]: if n == 0: return [] def generateTrees(mini: int, maxi: int) -> List[Optional[int]]: if mini > maxi: return [None] ans = [] for i in range(mini, maxi + 1): for left in generateTrees(mini, i - 1): for right in generateTrees(i + 1, maxi): ans.append(TreeNode(i)) ans[-1].left = left ans[-1].right = right return ans return generateTrees(1, n)
Unique Binary Search Trees II Leetcode Solution in CPP
class Solution { public: vector<TreeNode*> generateTrees(int n) { if (n == 0) return {}; return generateTrees(1, n); } private: vector<TreeNode*> generateTrees(int min, int max) { if (min > max) return {nullptr}; vector<TreeNode*> ans; for (int i = min; i <= max; ++i) for (TreeNode* left : generateTrees(min, i - 1)) for (TreeNode* right : generateTrees(i + 1, max)) { ans.push_back(new TreeNode(i)); ans.back()->left = left; ans.back()->right = right; } return ans; } };
Unique Binary Search Trees II Leetcode Solution in Java
class Solution { public List<TreeNode> generateTrees(int n) { if (n == 0) return new ArrayList<>(); return generateTrees(1, n); } private List<TreeNode> generateTrees(int min, int max) { if (min > max) return Arrays.asList((TreeNode) null); List<TreeNode> ans = new ArrayList<>(); for (int i = min; i <= max; ++i) for (TreeNode left : generateTrees(min, i - 1)) for (TreeNode right : generateTrees(i + 1, max)) { ans.add(new TreeNode(i)); ans.get(ans.size() - 1).left = left; ans.get(ans.size() - 1).right = right; } return ans; } }
Note: This problem Unique Binary Search Trees II is generated by Leetcode but the solution is provided by Chase2learn This tutorial is only for Educational and Learning purposes.