题意:给一个整数n,求出1到n能够构成的所有二叉树
思路:可以用递归首先求出左子树构成的列表和右子树构成的列表,从1到n枚举所有根节点,将每个左子树和每个右子树的根连到当前的根上,最底层可能是null,也可能只有一个节点,最顶层则是所要求的答案
class Solution {
public List<TreeNode> generateTrees(int n) {
if (n == 0)
return new ArrayList<TreeNode>();
return solve(1,n);
}
public List<TreeNode> solve(int start, int end) {
List<TreeNode> res = new ArrayList<>();
if (start > end) {
res.add(null);
return res;
}
for (int i = start; i <= end; i++) {
List<TreeNode> llist = solve(start, i-1);
List<TreeNode> rlist = solve(i+1, end);
for (TreeNode l : llist) {
for (TreeNode r : rlist) {
TreeNode cur = new TreeNode(i);
cur.left = l;
cur.right = r;
res.add(cur);
}
}
}
return res;
}
}