问题
给定一个整数 n,生成所有由 1 … n 为节点所组成的二叉搜索树。
例子
思路
-
方法1
获取左子树集合和右子树集合,轮番组成树
-
方法2
代码
//方法1
class Solution {
public List<TreeNode> generateTrees(int n) {
if(n==0) return new ArrayList<TreeNode>();
return generate(1,n);
}
public List<TreeNode> generate(int i, int j){
List<TreeNode> list=new ArrayList<>();
if(i>j) {
list.add(null);
return list;
}
for(int k=i; k<=j; k++) {
//k为跟
List<TreeNode> listL = generate(i,k-1);
List<TreeNode> listR = generate(k+1,j);
//左子树的可能性集合,右子树的可能性集合,为空时【里面有null元素,长度为1]
for(TreeNode left : listL) {
for(TreeNode right: listR) {
TreeNode root = new TreeNode(k);
root.left=left;
root.right=right;
list.add(root);
}
}
}
return list;
}
}
//方法2