LeetCode 96. 不同的二叉搜索树(中)
一个披着二叉树外衣的动态规划问题
题目
给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?
示例
示例:
1 |
|
考察知识点
动态规划、数学(卡塔兰数)
核心思想
这是一个披着二叉树外衣的动态规划问题,实际上,这就是卡塔兰数的求解过程。
下图展示了状态转换的关系:


由上图可知状态转换方程为:
\[
dp[i] = dp[0]*dp[i-1] + dp[1]*dp[i-2] + ... + dp[i-2]*dp[1] + dp[i-1]*dp[0]
\]
实际上就是卡塔兰数的求解方程,卡塔兰数是组合数学中一个常在各种计数问题中出现的数列。卡塔兰数的一般项公式为
前20项的卡塔兰数为:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, ...
Python版本
1 |
|
参考链接
!(Grandyang)[https://www.cnblogs.com/grandyang/p/4299608.html]
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!