Unique Binary Search Trees-计算表示相同序列的不同BST个数

无人久伴 提交于 2020-01-27 04:35:13
题目描述:
给定整数n,计算存储序列为1...n的结构唯一的BST的个数
题目来源
http://oj.leetcode.com/problems/unique-binary-search-trees/
题目分析:
对于一个表示序列为1...n的BST,根元素可以是1到n中的任何一个数,当根元素为 i 时,左子树为表示1...i - 1的BST,右子树为表示i + 1...n的BST,所以,原问题可以通过子问题的解得到
定义状态f(i,j),状态f(i,j)为表示序列i...j的结构唯一的BST的个数,通过枚举根的值可以得到:
f(i,j) = sum(f(i,k - 1) * f(k + 1, j))(i <= k <= j)
时间复杂度:O(n^3)
示例代码:
int dp[100][100];

int numTrees(int n) {
    memset(dp, 0, sizeof(dp));
    for(int i = 1; i <= n; ++i)
        dp[i][i - 1] = dp[i + 1][i] = 1;

    for(int len = 1; len <= n; ++len) {
        for(int i = 1; i <= n - len + 1; ++i) {
            for(int k = i; k <= i + len - 1; ++k) {
                dp[i][i + len - 1] += dp[i][k - 1] * dp[k + 1][i + len - 1];
            }
        }
    }

    return dp[1][n];
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!