大致思路:由于每个子树的结构都可能有多种,根据左子树和右子树以及根节点得到的树也就有很多种情况,我们没办法一种一种进行记录,只能通过两个ArrayList分别记录左子树和右子树。然后通过这两个ArrayList构造出该树的所有结构,再将该ArrayList返回。若子树为空,则必须add一个null到返回列表中。
public class Solution {
public ArrayList<TreeNode> generateTrees (int n) {
// write code here
return getAns(1,n);
}
ArrayList<TreeNode> getAns(int start ,int end){
ArrayList<TreeNode> res = new ArrayList<>();
if(start>end) {
res.add(null);//一定要返回一个null
return res;
}
for(int i = start;i<=end;i++){
ArrayList<TreeNode> left = getAns(start,i-1);
ArrayList<TreeNode> right = getAns(i+1,end);
for(TreeNode lnode : left){
for(TreeNode rnode : right) {
TreeNode root = new TreeNode(i);
root.left = lnode;
root.right = rnode;
res.add(root);
}
}
}
return res;
}
}