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:

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/unique-binary-search-trees-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
递归构建子树。
对每个数字i,递归构建左子树集合,再递归构建右子树集合。然后对所有的左子树集合元素和右子树集合元素两两配对。
class Solution {
public List<TreeNode> generateTrees(int n) {
if (n == 0) {
List<TreeNode> root = new ArrayList<>();
return root;
}
return generate(1, n);
}
private List<TreeNode> generate(int left, int right) {
// 节点为null的情况
if (left > right) {
List<TreeNode> root = new ArrayList<>();
root.add(null);
return root;
}
List<TreeNode> root = new ArrayList<>();
for (int i = left; i <= right; i++) {
// 构建左子树和右子树集合
List<TreeNode> leftTree = generate(left, i - 1);
List<TreeNode> rightTree = generate(i + 1, right);
// 遍历左子树和右子树集合元素,构建当前节点的集合
for (int j = 0; j < leftTree.size(); j++) {
for (int k = 0; k < rightTree.size(); k++) {
TreeNode treeNode = new TreeNode(i);
treeNode.left = leftTree.get(j);
treeNode.right = rightTree.get(k);
root.add(treeNode);
}
}
}
return root;
}
}
本文介绍了一种使用递归方法生成所有可能的唯一二叉搜索树的算法,通过构建子树集合并进行配对,实现对指定整数范围内所有结构独特的二叉搜索树的生成。
457

被折叠的 条评论
为什么被折叠?



