C/C++编程(1~8级)全部真题・点这里
第1题:有多少种二叉树
输入n(1<n<13),求n个结点的二叉树有多少种形态
时间限制:1000
内存限制:65536
输入
整数n
输出
答案
样例输入
3
样例输出
5
这个问题可以使用动态规划的方法来解决。我们可以定义一个数组dp
,其中dp[i]
表示有i
个节点时的二叉树的种数。根据二叉树的性质,我们可以知道一个二叉树的种数取决于其左子树和右子树的种数。
具体的动态规划递推关系如下:
对于i
个节点的二叉树,我们可以选择一个节点作为根节点,将其左边的节点构成左子树,右边的节点构成右子树。根据这个划分,可以得到以下关系:
dp[i] = dp[0] * dp[i-1] + dp[1] * dp[i-2] + ... + dp[i-1] * dp[0]
其中,dp[j]
表示有j</