Unique Binary Search Trees

来源:互联网 发布:iphone 使用电脑网络 编辑:程序博客网 时间:2024/06/05 10:04

Given n, how many structurally unique BST's (binarysearch 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

 

解析:我们设f(n)表示n个节点所能构造的unique BST个数.

f(0)=1; f(1)=1;

n>1时候有

f(n)=f(n-1)*f(0)+f(n-2)*f(1)……f(0)*f(n-1);

可以看出有子结构性质,我们利用动态规划的思想,使用备份录,记载f(n),所以可以得到一个O(n2)的复杂度,可以接受.(应该可以直接推导出f(n)f(0)f(1)的关系,可惜本人能力有限,没推倒出来).

classSolution {public:    int numTrees(int n) {        int value[2000];        memset(value,0,sizeof(value));        value[0]=1;        value[1]=1;        for (int i=2; i<=n; ++i){            for (int j=0; j<i; ++j){               value[i]+=value[j]*value[i-j-1];            }        }        return value[n];    }};


0 0