95. Different Binary Search Trees II
Problem-solving ideas
- Traverse each node
- View the binary search tree with k as the root node
- Store the root nodes of all left subtrees
- Store the root nodes of all right subtrees
- Assemble the left and right subtrees and store the root node in a vector
class Solution {
public List<TreeNode> generateTrees(int n) {
if(n < 1) return generate(1,0);
return generate(1,n);
}
List<TreeNode> generate(int start,int end){
List<TreeNode> subTree = new ArrayList<>();
if(start > end){
subTree.add(null);
return subTree;
}
for(int k = start; k <= end; k++){
List<TreeNode> left = generate(start,k - 1);
List<TreeNode> right = generate(k + 1,end);
for(int i = 0; i < left.size(); i++){
for(int j = 0; j < right.size(); j++){
TreeNode root = new TreeNode(k);
root.left = left.get(i);
root.right = right.get(j);
subTree.add(root);
}
}
}
return subTree;
}
}