解题思路
- 遍历每一个节点
- 查看以k为根节点的二叉搜索树
- 储存所有左子树的根节点
- 储存所有右子树的根节点
- 将左子树和右子树组装起来 将根节点储存在向量中
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;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60