Leetcode 96. 不同的二叉搜索树

215 阅读1分钟

“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”

今天写了二叉树的中序遍历,所以打算把热题100中关于二叉树的题,都解一遍,方便大家专项学习

一、题目描述

  • 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。

二、思路分析

  • 这题一看就有点懵
  • 所谓二叉搜索树:左子树小于根,根需要小于右子树
  • 这道题我们可以画一下图,找一下递推关系
  • 推导公式:dp[n]=dp[0]*dp[n]+dp[i-1]*dp[n-i]

三、AC 代码:

class Solution {
    public int numTrees(int n) {
        //公式dp[n]=dp[0]*dp[n]+dp[i-1]*dp[n-i]
        //创建数组+1是因为从零开始
        int dp[]= new int[n+1];
        dp[0] = 1;
        dp[1] = 1;
        //i代表ni = 2 因为已经定义了0位和1位的值 
        for(int i = 2; i<=n;++i){
            //j代表i 
            for(int j = 1;j<=i;++j){
                dp[i] += dp[j-1] * dp[i-j];
            }
        }
      return dp[n];
    }
}

四、总结:

  • 好了,代码撸完,我们总结一下
    • 当没有思路的情况下,一定要画图

    • 根据图找出归路,也就是递推公式

    • 根据递推公式进行解题

最后这个算法是Leetcode的第96题,是热题100的第44题,去年我刷了热题100用时一个月左右,接下来我会继续更新,小伙伴可以点赞关注,如果你也在刷热题100的话,希望可以对你有一些启发!