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
Base case: n==0, n==1时,f(n)==1
递推关系:f(n)=∑f(i)*f(n-i-1)。即以第i个为根节点,左右子树数目相乘。
解法一:递归
class Solution { public: int numTrees(int n) { if(n == 0) return 1; else if(n == 1) return 1; else { int count = 0; for(int i = 0; i <= (n-1)/2; i ++) { if(i < n-1-i) count += 2*numTrees(i)*numTrees(n-1-i); else count += numTrees(i)*numTrees(n-1-i); } return count; } } };
解法二:动态规划
class Solution { public: int numTrees(int n) { if(n==0 || n == 1) return 1; vector<int> v(n+1, 0); v[0] = 1;//n==0 v[1] = 1;//n==1 for(int i = 2; i <= n; i ++) {//n == i for(int j = 0; j < i; j ++) { v[i] += v[j]*v[i-1-j]; } } return v[n]; } };