题目描述
给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?
示例:
1 | 输入: 3 |
题解
动态规划
这道题需要动手推导, 根据下图的关系:
可以总结出思路, 对于n
个节点来说, 每个节点都可以作为根节点, 每个节点作为根节点的所有情况加起来就是n
个节点的总数量. 比如图中的 n=3 的情况, 就是节点1作为根节点的情况 + 节点2作为根节点的情况 + 节点3作为根节点的情况. 而每个节点作为根节点时的可能性数量又等于左右子树的情况相乘. 这就是一个动态规划的问题, 因为每个状态都与前几个状态有关.
G(n)=f(1)+f(2)+f(3)+f(4)+…+f(n)
其中
f(i)=G(i−1)∗G(n−i)
综合两个公式可以得到 卡特兰数
公式
G(n) = G(0)G(n-1)+G(1)(n-2)+…+G(n-1)G(0)G(n)=G(0)G(n−1)+G(1)G(n−2)+…+G(n−1)G(0)
1 | public class lc96 { |