题目的意思是输出所有可能的二叉树 坑点:
1.注意返回的数据类型,vector<TreeNode*>是一个头节点,所以每回插入都要new,否则会改变上一个插入的节点
2.多练习树的递归算法,很有用
3.使用类似于STL的迭代方式时要注意左闭右开的原则
/**
* 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 s,int t){
vector<TreeNode*> ans;
if(s == t-1){
TreeNode *root = new TreeNode(s);
ans.push_back(root);
return ans;
}
for(int i = s; i != t; i++){
vector<TreeNode*>lefts = generateTrees(s,i);
vector<TreeNode*> rights = generateTrees(i+1,t);
if(lefts.size()==0){
for(auto right : rights){
TreeNode *root = new TreeNode(i);
root->right = right;
ans.push_back(root);
}
}else if(rights.size()==0){
for(auto left : lefts){
TreeNode *root = new TreeNode(i);
root->left = left;
ans.push_back(root);
}
}else{
for(auto left : lefts){
for(auto right : rights){
TreeNode *root = new TreeNode(i);
root->right = right;
root->left = left;
ans.push_back(root);
}
}
}
}
return ans;
}
vector<TreeNode*> generateTrees(int n) {
return generateTrees(1,n+1);
}
};