0%

Unique Binary Search Trees

Question

Given n, how many structurally unique BST’s (binary search trees) that store values 1 … n?

Example:
Input: 3
Output: 5

Explanation:
Given n = 3, there are a total of 5 unique BST’s:

1
2
3
4
5
1         3     3      2      1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*
@param: int
@return: int
Algorithm: dp, 打着BST的一道DP题,以当前节点为root, 判断左右两边子节点个数,无关大小,然后左右子树乘起来
*/
public int numTrees(int n) {
if (n <= 0) return 0;

int[] dp = new int[n+1];
dp[0] = 1;
dp[1] = 1;
for (int i = 2; i <= n; i++) {
for (int j = 0; j < i; j++) {
dp[i] += dp[j] * dp[i-j-1];
}
}
return dp[n];
}