package com.interview.algorithms.tree; import java.util.ArrayList; class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } /** * Created_By : zhaoxm (xmpy) * Date : 2014-3-21 * Time : 下午3:15:04 */ public class UniqueBinarySearchTrees2 { public ArrayList<TreeNode> generateTrees(int n) { return generate(1,n); } public ArrayList<TreeNode> generate(int begin, int end){ ArrayList<TreeNode> result = new ArrayList<TreeNode>(); if(begin > end){ result.add(null); return result; } if(begin == end){ result.add(new TreeNode(begin)); return result; } for(int i = begin; i <= end; i++){ ArrayList<TreeNode> leftResult = generate(begin, i - 1); ArrayList<TreeNode> rightResult = generate(i+1, end); for(TreeNode left : leftResult){ for(TreeNode right: rightResult){ TreeNode temp = new TreeNode(i); temp.left = left; temp.right = right; result.add(temp); } } } return result; } public static void main(String[] args){ UniqueBinarySearchTrees2 u = new UniqueBinarySearchTrees2(); ArrayList<TreeNode> r = u.generateTrees(3); System.out.println(r.size()); } }