题意理解
给定一个整数n,从1到n序列可组成多少个不同的二叉树?
问题分析
用动态规划
状态量是dp[i]表示i个整数可组成不同的二叉树的数量。
状态转移方程 dp[i] = sum(dp[j-1] * dp[n-j]), 1 <= j <= i。1<=i<=n。以1到i中任意一个数作为根,左边子树的数量×右边子树的数量就是这个数对应的数量,将这些数所有的数量加起来就是i对应的数量。
其他
还可以用catalan数直接计算,公式为
C0 = 1, Cn+1 = [2(2n+1)/(n+2)] * Cn.
链接
与输出二叉树的情况相同:
https://blog.youkuaiyun.com/xiexie1357/article/details/86743265