Problem:
Given n, how many structurally unique BST's (binary search trees) that store values 1 ... n?
Explanation:
给定n,返回可能的包含1-n的所有不重复的搜索二叉树
My Thinking:
My Solution:
Optimum Thinking:
深度优先遍历,遍历1到n,对每个数的左边和右边递归构造左子树和右子树。
Optimum Solution:
class Solution {
public List<TreeNode> generateTrees(int n) {
if(n==0)
return new ArrayList<>();
return generate(1,n);
}
public List<TreeNode> generate(int left,int right){
List<TreeNode> list=new ArrayList<>();
if(left>right){
list.add(null);
return list;
}
if(left==right){
list.add(new TreeNode(left));
return list;
}
List<TreeNode> leftsub,rightsub;
for(int i=left;i<=right;i++){
leftsub=generate(left,i-1);
rightsub=generate(i+1,right);
for(TreeNode lnode:leftsub){
for(TreeNode rnode:rightsub){
TreeNode root=new TreeNode(i);
root.left=lnode;
root.right=rnode;
list.add(root);
}
}
}
return list;
}
}