leetcode 95. 不同的二叉搜索树 II
根据上一题的思路。这次只要dfs即可。
这个可以说是dfs里面比较麻烦的了,一开始打算使用二重指针,但后面发现使用vector<*> 更简单。
总的来说,思路很简单。但是写的时候需要注意一些细节。
dfs这种东西,只要理解了,就很容易写出来。也不太好讲。直接看代码吧。
/**
* 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) {
vector<TreeNode*> vec;
if(n==0) return vec;
return dfs(1,n);
}
vector<TreeNode*> dfs(int l,int r)
{
if(l>r)
{
vector<TreeNode*> vec;
TreeNode *tmp=NULL;
vec.push_back(tmp);
return vec;
}
else if(l==r)
{
TreeNode *tmp=new TreeNode(l);
vector<TreeNode*> vec;
vec.push_back(tmp);
return vec;
}
else
{
vector<TreeNode*> vec;
for(int i=l;i<=r;i++)
{
TreeNode *root=new TreeNode(i);
vector<TreeNode*> left=dfs(l,i-1);
vector<TreeNode*> right=dfs(i+1,r);
for(auto lt:left)
{
for(auto rt:right)
{
TreeNode *tmp=new TreeNode(i);
tmp->left=lt;
tmp->right=rt;
vec.push_back(tmp);
}
}
}
return vec;
}
}
};
还没有评论,来说两句吧...