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
n = 0 时,空树,只有一棵。n = 1 时,只有一种可能,也是 1。
n >= 2 时,对 12....n,分别以 i 为根节点,那么左边有 i-1 个节点,右边有 n-i-1 个节点,所以
f[n] += f[k-1]*f[n-k-1], k = 1,2,....,n-1
C++:
class Solution { public: int numTrees(int n) { int *cnt = new int[n+1]; memset(cnt,0,(n+1)*sizeof(int)); cnt[0] = 1; cnt[1] = 1; for(int i = 2;i <= n;i++) for(int j = 0;j < i;++j) cnt[i] += cnt[j]*cnt[i-j-1]; int sum = cnt[n]; delete []cnt; return sum; } };
class Solution: # @return an integer def numTrees(self, n): f = [0 for x in range(0,n+1)] f[0] = 1 f[1] = 1 for i in range(2,n+1): for j in range(0,i): f[i] += f[j]*f[i-j-1] return f[n]
【LeetCode】Unique Binary Search Trees
原文地址:http://blog.csdn.net/jcjc918/article/details/41725855