Given n, generate all structurally unique BST's (binary search trees) that store values 1...n.
For example,
Given n = 3, your program should return all 5 unique BST's shown below.
1 3 3 2 1 / / / 3 2 1 1 3 2 / / 2 1 2 3
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
Analyse: Reference at http://blog.csdn.net/sbitswc/article/details/25845567.
Runtime: 24ms.
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 vector<TreeNode*> generateTrees(int n) { 13 if(n == 0) return generate(1, 0); 14 return generate(1, n); 15 } 16 vector<TreeNode* > generate(int start, int end){ 17 vector<TreeNode* > subtree; 18 if(start > end){ 19 subtree.push_back(nullptr); //what does it mean? 20 return subtree; 21 } 22 for(int k = start; k <= end; k++){ 23 vector<TreeNode* > leftSubtree = generate(start, k - 1); 24 vector<TreeNode* > rightSubtree = generate(k + 1, end); 25 26 for(int i = 0; i < leftSubtree.size(); i++){ 27 for(int j = 0; j < rightSubtree.size(); j++){ 28 TreeNode* root = new TreeNode(k); 29 root->left = leftSubtree[i]; 30 root->right = rightSubtree[j]; 31 subtree.push_back(root); 32 } 33 } 34 } 35 return subtree; 36 } 37 };