一、问题
输出n个节点的二叉树有多少种形态
或
二、实现
import java.util.HashMap;
public class Test{
public static void main(String args[]) {
int n = 4;
int res = getRootNum(n);
System.out.println(res);
}
// 获取n个节点的二叉树 有多少种形态
private static int getRootNum(int n) {
if(n==0 || n==1) return 1;
int dp[] = new int[n+1]; // dp[i]表示i个节点时的形态数
dp[0] = 1;
dp[1] = 1;
for(int i=2;i<=n;i++) {//分别计算,总结点数为i时的形态数
dp[i] = 0;
for(int j=0;j<i;j++) {//左子树的节点数目(最多为i-1,不计根节点)
dp[i]+=dp[j]*dp[i-j-1]; //左子树形态数 * 右子树形态数
}
}
return dp[n];
}
}