class Solution {
public List<TreeNode> generateTrees(int n) {
if(n == 0){
return new LinkedList<TreeNode>();
}
return generateTrees(1, n);
}
public List<TreeNode> generateTrees(int start, int end){
List<TreeNode> allTrees = new LinkedList<TreeNode>();
if(start > end){
allTrees.add(null);
return allTrees;
}
for(int i = start; i <= end; i++){
List<TreeNode> leftTrees = generateTrees(start, i - 1);//当前节点不算,i=1时add(null)
List<TreeNode> rightTrees = generateTrees(i + 1, end);//i=end时add(null)
for(TreeNode left : leftTrees){//null时也会循环,得到的值为null
for(TreeNode right : rightTrees){
TreeNode currTree = new TreeNode(i);
currTree.left = left;
currTree.right = right;
allTrees.add(currTree);//按照中序遍历添加,返回的时候也是中序遍历
}
}
}
return allTrees;
}
}
力扣95. 不同的二叉搜索树 II
最新推荐文章于 2022-03-27 13:01:33 发布