- 判断函数终止时,null值加入到res中很关键。
- 选定某个根节点时,递归得到他所有可能的左子树和右子树。
- 同一根节点下的左子树和右子树可以任意组合。
- 得到最后的res。
public class Solution {
public ArrayList<TreeNode> generateTrees (int n) {
return help(1,n);
}
public ArrayList<TreeNode> help(int start , int end){
ArrayList<TreeNode> res = new ArrayList<>();
if(start > end)
{
res.add(null);
return res;
}
for(int i = start ; i <= end ; i++)
{
ArrayList<TreeNode> left = help(start,i-1);
ArrayList<TreeNode> right = help(i+1,end);
for(TreeNode l : left)
{
for(TreeNode r : right)
{
TreeNode root = new TreeNode(i);
root.left = l;
root.right = r;
res.add(root);
}
}
}
return res;
}
}