Medium
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
ATTENTION POINT
defination of tree
#include <iostream> #include<vector> using namespace std; #include <iostream> #include<vector> //segement default内存操作不当 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 {}; const auto& ans=generateTrees(1,n); cout<<ans.size()<<endl; return ans; } private: vector<TreeNode*> generateTrees(int l,int r) { if(l>r) return {nullptr}; vector<TreeNode*> ans; for(int i=l;i<=r;++i) for(TreeNode* left:generateTrees(l,i-1)) for(TreeNode* right:generateTrees(i+1,r)) { ans.push_back(new TreeNode(i)); ans.back()->left=left; ans.back()->right=right; } return ans; } }; //class Solution { //public: // vector<TreeNode*> generateTrees(int n) { // if (n == 0) return {}; // const auto& ans = generateTrees(1, n); // cout << ans.size() << endl; // return ans; // } //private: // vector<TreeNode*> generateTrees(int l, int r) { // if (l > r) return { nullptr }; // vector<TreeNode*> ans; // for (int i = l; i <= r; ++i) // for (TreeNode* left : generateTrees(l, i - 1)) // for (TreeNode* right : generateTrees(i + 1, r)) { // ans.push_back(new TreeNode(i)); // ans.back()->left = left; // ans.back()->right = right; // } // return ans; // } //}; void printTree(TreeNode* tmp) { if(tmp==nullptr) return; else{ cout<<tmp->val; printTree(tmp->left); printTree(tmp->right); } } int main() { Solution s1; int n=3; // cin>>n; vector<TreeNode*> ans=s1.generateTrees(n); for(auto i:ans) { printTree(i); cout<<endl; } return 0; }