95. Unique Binary Search Trees II
Description Difficulty: Medium
Related Topics: Dynamic Programming , Backtracking , Tree , Binary Search Tree , Binary Tree
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:
1 2 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:
1 2 Input: n = 1 Output: [[1]]
Constraints:
Hints/Notes
Draw the tree
Dynamic programming
Solution Language: C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 class Solution {public : vector<TreeNode*> generateTrees (int n) { if (n == 0 ) return vector <TreeNode*>(); return generate (1 , n); } vector<TreeNode*> generate (int low, int high) { vector<TreeNode*> res; if (low > high) { res.push_back (nullptr ); return res; } else if (low == high) { res.push_back (new TreeNode (low)); return res; } for (int i = low; i <= high; i++) { vector<TreeNode*> leftTrees = generate (low, i - 1 ); vector<TreeNode*> rightTrees = generate (i + 1 , high); for (TreeNode* leftTree : leftTrees) { for (TreeNode* rightTree : rightTrees) { TreeNode* root = new TreeNode (i); root->left = leftTree; root->right = rightTree; res.push_back (root); } } } return res; } };