题目解析:给定一个n,用1-n这些数字去创建搜索二叉树,并将所有搜索二叉树的头结点放到vector中返回。
解题思路:好吧,这题我也说不清是怎么肥事,自己举个例子画一画就明白了。
class Solution {
public:
vector<TreeNode *> generateTrees(int n) {
/*vector<TreeNode*> res;
if (0 == n)
return res;*///写成这样就不通过,可能是希望vector里面有 NULL吧
return _generateTrees(1,n);
}
vector<TreeNode*> _generateTrees(int start, int end)
{
vector<TreeNode*> res;
if (start > end)
{
res.push_back(NULL);
return res;
}
for (int i = start; i <= end; i++) //这是用来每个数都作为根的循环
{
vector<TreeNode*>left = _generateTrees(start, i - 1);
vector<TreeNode*>right = _generateTrees(i + 1, end);
for (int j = 0; j < left.size(); j++) //左子树可能不止一种可能
{
for (int k = 0; k < right.size(); k++)//右子树也可能不止一种可能
{
TreeNode* root = new TreeNode(i);
root->left = left[j];
root->right = right[k];
res.push_back(root);
}
}
}
return res;
}
};