Given n, generate all structurally unique BST's (binary search trees) that store values 1...n.
For example,
Given n = 3, your program should return all 5 unique BST's shown below.
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3这道题拿到的时候没思路,参考了别人的代码,下次写注意下。
分别用1到n做root,递归遍历左右子树,将树的结构先连起来再将root存入list中
注意String这种类型的用在函数形参中,函数是void型的,是无法返回的,即使全局变量也不行,abc(String s)的String s相当于新初始化了。但是List可以
Source
public List<TreeNode> generateTrees(int n) {
return generateTree(1, n); //以1做root开始到以n做root结束
}
public List<TreeNode> generateTree(int left, int right){
List<TreeNode> st = new ArrayList<TreeNode>();
if(left > right){
st.add(null);
return st;
}
for(int i = left; i <= right; i++){
List<TreeNode> l = generateTree(left, i - 1);
List<TreeNode> r = generateTree(i + 1, right);
for(int j = 0; j < l.size(); j++){
for(int k = 0; k < r.size(); k++){
TreeNode root = new TreeNode(i);
root.left = l.get(j);
root.right = r.get(k);
st.add(root); //先将root的left,right连接好再将root放入返回list中
}
}
}
return st;
}
Test
public static void main(String[] args){
int n = 3;
List<TreeNode> a = new Solution().generateTrees(n);
System.out.println(a);
}