给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。
示例 1:
输入:n = 3
输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/unique-binary-search-trees-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<TreeNode> generateTrees(int n) {
if(n== 0){
return new ArrayList<TreeNode>();
}
return generate(1,n);
}
public List<TreeNode> generate(int start,int end){
List<TreeNode> list = new ArrayList();
if(start > end)
{
list.add(null);
return list;
}
else{
for(int middle = start;middle <= end;middle++ ){
List<TreeNode> list1 = generate(start,middle -1);
List<TreeNode> list2 = generate(middle+1,end);
for(TreeNode left : list1){
for(TreeNode right: list2){
TreeNode t = new TreeNode(middle,left,right);
list.add(t);
}
}
}
}
return list;
}
}