Given an integer 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
参照 点击查看
/** * 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> generateTrees(int n) { if(n<=0){ return new ArrayList<TreeNode>(); }else{ return helper(1,n); } } public List<TreeNode> helper(int start,int end){ List<TreeNode> subtree=new ArrayList<TreeNode>(); if(start>end){ TreeNode p=null; subtree.add(p); }else{ //i是根节点 for(int i=start;i<=end;i++){ //从start到i-1-start可以产生多少个左子树 //从i+1到end可以产生多少个右子树 List<TreeNode> leftTree=helper(start,i-1); List<TreeNode> rightTree=helper(i+1,end); //以i为根节点的子树个数等于左子树的个数乘以右子树的个数 //将多有可能的子树与根节点相连 for(int j1=0;j1<leftTree.size();j1++){ for(int j2=0;j2<rightTree.size();j2++){ TreeNode p = new TreeNode(i); p.left=leftTree.get(j1); p.right=rightTree.get(j2); subtree.add(p); } } } } return subtree; } }