给出n,生成所有由1...n为节点组成的不同的二叉查找树
Yes
样例
给出n = 3,生成所有5种不同形态的二叉查找树:
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right = NULL; * } * } */ class Solution { public: /** * @paramn n: An integer * @return: A list of root */ vector<TreeNode *> generateTrees(int n) { // write your code here vector<TreeNode*>res=helper(1,n); return res; } vector<TreeNode*> helper(int start,int end){ vector<TreeNode*>res; if(start>end){ res.push_back(NULL); return res; } if(start==end){ res.push_back(new TreeNode(start)); return res; } if(start<end){ for(int i=start;i<=end;i++){ vector<TreeNode*>left=helper(start,i-1); vector<TreeNode*>right=helper(i+1,end); for(int l=0;l<left.size();l++){ for(int r=0;r<right.size();r++){ TreeNode*root=new TreeNode(i); root->left=left[l]; root->right=right[r]; res.push_back(root); } } } return res; } } };