Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 ... n.
Example:
Input: 3 Output: [ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,1,3], [1,null,2,null,3] ] Explanation: The above output corresponds to the 5 unique BST's shown below: 1 3 3 2 1 / / / 3 2 1 1 3 2 / / 2 1 2 3
Approach #1: C++.
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<TreeNode*> generateTrees(int n) { if (n == 0) { return vector<TreeNode*>(); } else { return generate_trees(1, n); } } vector<TreeNode*> generate_trees(int start, int end) { vector<TreeNode*> all_trees; if (start > end) { all_trees.push_back(NULL); return all_trees; } for (int i = start; i <= end; ++i) { vector<TreeNode*> left_trees = generate_trees(start, i - 1); vector<TreeNode*> right_trees = generate_trees(i + 1, end); for (TreeNode* l : left_trees) { for (TreeNode* r : right_trees) { TreeNode* curr_tree = new TreeNode(i); curr_tree->left = l; curr_tree->right = r; all_trees.push_back(curr_tree); } } } return all_trees; } };