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
Let C(n) be the number of distinct binary trees with n nodes. This is equal to the number of trees that have a root, a left subtree with j nodes, and a right subtree of (n-1)-j nodes, for each j. That is,
C(n) = C(0)C(n-1) + C(1)C(n-2) + ... + C(n-1)C(0)
which is
http://cs.lmu.edu/~ray/notes/binarytrees/
// dp: bst[n] = bst[0]*bst[n-1] + bst[1]*bst[n-2] + ... + bst[n-1]*bst[0]
public class Solution {
public int numTrees(int n) {
int [] bst = new int[n+1];
bst[0] = 1; // empty subtree
bst[1] = 1;
for(int i=2; i<n+1; i++) {
bst[i] = 0;
for(int j=0; j<i; j++) {
bst[i] += bst[j] * bst[i-j-1];
}
}
return bst[n];
}
}