解题思路:
输入n=3
n = 0 1个
n = 1 1个
n = 2 2个
头1+头2+头3
头1 = 左子树0节点(个数)x右子树2个节点(个数)
头2 = 左子树1节点(个数)x右子树1个节点(个数)
头3 = 左子树2节点(个数)x右子树0个节点(个数)
dp含义:
dp[3] = dp[0] *dp[2] + dp[1] *dp[1] + dp[2] * dp[0]
递推公式:
dp[i] += dp[j-1] * dp[i-j]
j相当于是头节点的元素,j-1相当于以j为头节点左子树节点数量,i-j以j为头节点右子树节点数量
将i遍历到j,进行累加
初始化:
dp[0] = 1
dp[1] = 1(可以从递推公式推出来,可以不初始化0)
遍历顺序:
从左往右,根据递推公式可知
代码实现:(最后如果结果有问题,记得打印dp数组)