一、问题描述

二、解题思路
这个题目其实跟值没有关系,是要看n个结点有多少种不同形状的二叉树,不要以为下面这三个是不同的结构,虽然值不一样,但是结构是一样的。

提出问题:如何用动态规划来解决4个结点有多少种结构?看下面图示:
dp[i]表示有i个结点时存在的不同结构数量:


从上面图示我们可以看到为状态转移方程:
初始化dp数组 i=0或i=1时表示没有结点或者只有一个结点时都只有一种结构;
i>=2时就表示了上面图示的情况,将所有可能的结构加起来。
三、代码实现
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @return int整型
*/
public int BSTCount (int n) {
//
int[] dp = new int[n+1];
dp[0]=1;
dp[1]=1;
for(int i=2;i<n+1;i++){
for(int j=1;j<=i;j++){
dp[i]+=dp[j-1]*dp[i-j];
}
//System.out.println("dp"+i+":"+dp[i]);
}
return dp[n];
}
}
413

被折叠的 条评论
为什么被折叠?



