Thought:
Recursion.
Code:
public class Solution {
public ArrayList<TreeNode> generateTrees(int n) {
return generateBST(1,n);
}
public ArrayList<TreeNode> generateBST(int start, int end){
ArrayList<TreeNode> result = new ArrayList<TreeNode>();
if(start>end){
result.add(null);
}else if(start==end){
result.add(new TreeNode(start));
}else{
for(int i=start;i<=end;i++){
ArrayList<TreeNode> left = generateBST(start,i-1);
ArrayList<TreeNode> right = generateBST(i+1,end);
for(int k = 0;k<left.size();k++){
for(int j = 0;j<right.size();j++){
TreeNode root = new TreeNode(i);
root.left = left.get(k);
root.right = right.get(j);
result.add(root);
}
}
}
}
return result;
}
}
No comments:
Post a Comment