给出n,生成所有由1...n为节点组成的不同的二叉查找树
样例
给出n = 3,生成所有5种不同形态的二叉查找树:
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @paramn n: An integer
* @return: A list of root
*/
public ArrayList<TreeNode> generateTrees(int n) {
return generate(1, n);
}
private ArrayList<TreeNode> generate(int start, int end){
ArrayList<TreeNode> rst = new ArrayList<TreeNode>();
if(start > end){
rst.add(null);
return rst;
}
for(int i=start; i<=end; i++){
ArrayList<TreeNode> left = generate(start, i-1);
ArrayList<TreeNode> right = generate(i+1, end);
for(TreeNode l: left){
for(TreeNode r: right){
TreeNode root = new TreeNode(i);
root.left = l;
root.right = r;
rst.add(root);
}
}
}
return rst;
}
}