1.题目描述
96. Unique Binary Search Trees
Medium
128252FavoriteShare
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 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
2.解题思路
二叉搜索树(BST)的结构具有递归特点,左右子树都是BST。任意i属于1,2,3,。。。。。n都可作为根节点。
用dp【k】 表示k个顶点可以构成多少个不同的BST
假设i是根节点,那么其左子树由1,2,3,。。。。i-1(i-1个顶点)组成;右子树由i+1, i+2, 。。。。。。n(n-i个顶点)构成。左子树右子树情况独立,所以对于i作为根节点,总共有dp(i-1)*dp(n-i)。遍历i求和。从dp【0】开始算一直计算到dp【n】即可。
3.实现代码
class Solution {
public:
int numTrees(int n) {
if (n==0) return 1;
int dp[n+1];
memset(dp, 0, sizeof(dp));
dp[0] = dp[1] = 1;
for (int i=2; i<=n; i++) {
for (int j=1; j<=i; j++) {
dp[i] += dp[j-1]*dp[i-j];
}
}
return dp[n];
}
};