给定一个整数 n,生成所有由 1 … n 为节点所组成的二叉搜索树。
示例:
输入: 3
输出:
[
[1,null,3,2],
[3,2,null,1],
[3,1,null,null,2],
[2,1,3],
[1,null,2,null,3]
]
解释:
以上的输出对应以下 5 种不同结构的二叉搜索树:
1 3 3 2 1
\ / / / \
3 2 1 1 3 2
/ / \
2 1 2 3
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/unique-binary-search-trees-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
参考别人的代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<TreeNode> generateTrees(int n) {
if(n==0)
return new ArrayList<>();
return getTrees(1,n);
}
private ArrayList<TreeNode> getTrees(int start, int end) {
ArrayList<TreeNode> list=new ArrayList<>();
if(start>end) {
list.add(null);
}
for (int i = start; i <= end; i++) {
ArrayList<TreeNode> left = getTrees(start, i - 1);
ArrayList<TreeNode> right = getTrees(i + 1, end);
for (int z = 0; z < left.size(); z++) { //这里left,right里面都是一个树,所以用二次循环形成一个完整的树
for (int j = 0; j < right.size(); j++) {
TreeNode root = new TreeNode(i);
root.left=left.get(z);
root.right=right.get(j);
list.add(root);
}
}
}
return list;
}
}