Unique Binary Search Trees
Given n, how many structurally unique BST's (binary search trees) that store values 1...n?
For example,
Given n = 3, there are a total of 5 unique BST's.
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
编程思路:
用动态规划来解。假设现在知道1....n-1每个数对应的排列数,对应n的排列数来说,有如下情况:左子树0个右子树n-1个,左子树1个右子树n-2个。。。。
public class Solution {
public int numTrees(int n) {
if(n==0)return 0;
if(n==1)return 1;
if(n==2)return 2;
int[] val = new int[n+1];
val[0] =1;
val[1]=1;
val[2]=2;
for(int i = 3;i<n+1;i++)
for(int j=0;j<i;j++)
val[i] += val[j]*val[i-1-j];
return val[n];
}
}
public class Solution {
public int numTrees(int n) {
if(n==0)return 0;
if(n==1)return 1;
if(n==2)return 2;
int[] val = new int[n+1];
val[0] =1;
val[1]=1;
val[2]=2;
for(int i = 3;i<n+1;i++)
for(int j=0;j<i;j++)
val[i] += val[j]*val[i-1-j];
return val[n];
}
}