class Solution {
public:
vector<TreeNode *> generateTrees(int n) {
if (n == 0) return {};
return *generateTreesDFS(1, n);
}
vector<TreeNode*> *generateTreesDFS(int start, int end) {
//为什么要用指向函数的指正?
vector<TreeNode*> *subTree = new vector<TreeNode*>();
//这里为什么需要用构造函数?这个构造函数是vector的还是treenode的还是别的呢?
if (start > end) subTree->push_back(NULL);
else {
for (int i = start; i <= end; ++i) {
vector<TreeNode*> *leftSubTree = generateTreesDFS(start, i - 1);
vector<TreeNode*> *rightSubTree = generateTreesDFS(i + 1, end);
for (int j = 0; j < leftSubTree->size(); ++j) {
for (int k = 0; k < rightSubTree->size(); ++k) {
TreeNode *node = new TreeNode(i);
node->left = (*leftSubTree)[j];
node->right = (*rightSubTree)[k];
subTree->push_back(node);
}
}
}
}
return subTree;
}
};
vector *generateTreesDFS(int start, int end)
这不是指向函数的指针, 这是成员函数的返回类型是一个vector的指针
vectorsubTree = new vector<TreeNode>();
这就是很正常的实例化(new)一个对象, 调用的当然是vector的构造函数