題意:給一個整數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;
}
}