Unique Binary Search Trees II
一、题目说明
与 Unique Binary Search Trees(http://blog.youkuaiyun.com/gldemo/article/details/48167973)不同的地方是输出所有可能组成的二叉搜索树。
二、思路
该算法应该是采用循环,循环按每个 i 作为根节点,循环中应用递归的方式去不断构造左子树和右子树。然后在循环中组合不同的左右子树。
三、java代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class solution {
public List<TreeNode> generateTress(int n) {
return generateTrees(1, n);
}
public List<TreeNode> generateTrees(int start, int end) {
List<TreeNode> list = new ArrayList<TreeNode>();
if(start > end ) {
list.add(null);
return list;
}
if(start == end) {
list.add(new TreeNode(start));
return list;
}
List<TreeNode> left, right;
for(int i = start; i <= end; i++) {
left = generateTrees(start, i-1);
right = generateTrees(i+1, end);
for(TreeNode l : left) {
for(TreeNode r : right) {
TreeNode root = new TreeNode(i);
root.left = l;
root.right = r;
list.add(root);
}
}
}
return list;
}
}