这是最开始的想法,可以建树,但是树建的不全。。。。==
/**
* 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:
//depth=1;
TreeNode* buildTree(int left,int right,int depth,vector<TreeNode*> result)
{
if(left>right)
return NULL;
else if(left==right)
{
TreeNode* root=new TreeNode(left);
return root;
}
else
{
for(int i=left;i<=right;i++)
{
TreeNode* root=new TreeNode(i);
root->left=buildTree(left,i-1,depth+1,result);
root->right=buildTree(i+1,right,depth+1,result);
if(depth==1)
result.push_back(root);
else
return root;
}
if(depth==1)
return NULL;
}
}
vector<TreeNode*> generateTrees(int n) {
vector<TreeNode*> result;
buildTree(1,n,1,result);
return result;
}
};
艰难AC了,可怕,还是卡在树的存储上,尝试了各种方法,最终还是采用了返回vector类型的TreeNode 指针,而不是单一TreeNode指针的方法。
/**
* 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:
//depth=1;
vector<TreeNode*> buildTree(int left,int right)
{
if(left>right)
{
vector<TreeNode*> result;
TreeNode* root=NULL;
result.push_back(root);
return result;
}
else if(left==right)
{
vector<TreeNode*> result;
TreeNode* root=new TreeNode(left);
result.push_back(root);
return result;
}
else
{
vector<TreeNode*> result;
for(int rootVal=left;rootVal<=right;rootVal++)
{
vector<TreeNode*> rootLeft=buildTree(left,rootVal-1);
vector<TreeNode*> rootRight=buildTree(rootVal+1,right);
for(int i=0;i<rootLeft.size();i++)
{
for(int j=0;j<rootRight.size();j++)
{
TreeNode* root=new TreeNode(rootVal);
root->left=rootLeft[i];
root->right=rootRight[j];
result.push_back(root);
}
}
}
return result;
}
}
vector<TreeNode*> generateTrees(int n) {
if(n==0)
{
vector<TreeNode*> result;
return result;
}
return buildTree(1,n);
}
};