Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 ... n.
Example:
Input: 3 Output: [ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,1,3], [1,null,2,null,3] ] Explanation: The above output corresponds to the 5 unique BST's shown below: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
思路:
使用递归的方式生成所有二叉树,代码如下:
vector<TreeNode*> generateTrees(int low, int high){
vector<TreeNode*> res;
if (low > high){
res.push_back(NULL);
return res;
}
if (low == high){
res.push_back( new TreeNode(low));
return res;
}
for (int i = low; i <= high; i++){
vector<TreeNode*> leftTree = generateTrees(low, i - 1);
vector<TreeNode*> rightTree = generateTrees(i + 1, high);
for (int left = 0; left < leftTree.size(); left++){
for (int right = 0; right < rightTree.size(); right++){
TreeNode* root = new TreeNode(i);
root->left = leftTree[left];
root->right = rightTree[right];
res.push_back(root);
}
}
}
return res;
}
vector<TreeNode*> generateTrees(int n) {
if (n == 0) return vector<TreeNode *>();
return generateTrees(1, n);
}
纪念贴图: