Luna's blog 月亮月亮酱

LeetCode 不同的二叉搜索树题解

2019-07-12

96. 不同的二叉搜索树

给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?

思路

假设n个节点存在二叉排序树的个数是G(n),令f(i)为以i为根的二叉搜索树的个数,则

当i为根节点时,其左子树节点个数为i-1个,右子树节点为n-i,则

综合两个公式可以得到卡特兰数公式

int numTrees(int n)
{
	vector<int> dp(n + 1);
	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];
}

动态规划题要注意从列出状态转移方程开始,不要忽视数学公式的推导过程


Similar Posts

Content