96.不同的二叉搜索树

在这里插入图片描述
思考过程:
1.能不能递归求出所有的二叉搜索树呢?
2.相邻的答案之间有没有规律呢?
3.找不到规律,但找出了每一个答案下的所有结果
4.看题解,才明白。。

下次做DP题目也这么思考,先看递归否,再找怎么由之前的答案推出现在的答案来。

  • ans[n]为所求答案,也就是节点数为n时,有多少二叉搜索树。
  • f(i)是以i为根节点的二叉搜索树的个数,左子树有i-1个元素,右子树有n-i个元素。
  • 所以f(i)=ans[i-1]*ans[n-i],左子树有ans[i-1]个可能,所以要相乘。
class Solution {
    public int numTrees(int n) {
        int[] ans=new int[n+1];
        ans[0]=ans[1]=1;
        for(int i=2;i<=n;i++){
            for(int j=1;j<=i;j++){
                ans[i]+=ans[j-1]*ans[i-j];
            }
        }
        return ans[n];
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章