首页 > 编程语言 >力扣96 不同的二叉搜索树 Java版本

力扣96 不同的二叉搜索树 Java版本

时间:2024-06-08 21:29:41浏览次数:31  
标签:左子 Java 形态 int 右子 力扣 节点 dp 96

文章目录


题目描述

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

示例 1:
在这里插入图片描述

输入:n = 3
输出:5
示例 2:

输入:n = 1
输出:1

提示:

1 <= n <= 19

代码

import java.lang.annotation.Retention;

class Solution {
    public int numTrees(int n) {
        int[] dp = new int[n+1];
        dp[0]=1;
        dp[1]=1;
        /*以三个点为例子,大致可以分为三种类型:
          1、以1为根节点,左子树0个节点,右子树2个节点,总共两种树的形态
          2、以2为根节点,左右子树各1个节点,总共1种树的形态
          3、以3为根节点,左子树2个节点,右子树0个节点,总共2种树的形态
          所以dp[3]也就是n=3的时候二叉搜索树的形态的个数是这三种情况之和:2+1+2
          对于n=i的时候来讲,左子树有j个节点,右子树就只能有i-j-1个节点,根据数学中组合排列的内容,形态总数应该是左子树的形态数乘以右子树的形态数,即dp[j]*dp[i-j-1]
          最终,n=i的时候的形态总数是选不同节点作为根节点所能够形成的树的形态个数之和,即dp[i] = dp[i]+dp[j]*dp[i-j-1];
        */
        for (int i = 2; i <=n ; i++) {
            for (int j = 0; j <i ; j++) {//这里选择j从0开始的意思是j代表左子树上节点的数量,左子树上最开始一个节点没有全都在右子树上
                dp[i] = dp[i]+dp[j]*dp[i-j-1];
            }
        }
        return dp[n];
    }
}

标签:左子,Java,形态,int,右子,力扣,节点,dp,96
From: https://blog.csdn.net/m0_47066863/article/details/139129218

相关文章

  • Java循环结构
    Java循环结构循环结构可以看成是条件判断语句和转向语句的结合。循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。它由循环体中的条件,判断继续执行某个功能还是退出循环。根据判断条件,循环结构又可细分为以下两种形式:先判断后执行的循环结构和先执行后判断......
  • 【JavaScript脚本宇宙】通知新风尚:打造互动性十足的Web提示系统
    定制通知体验:深入了解JavaScript通知库前言在现代web开发中,通知库扮演着至关重要的角色,它们为用户界面的交互性和用户体验提供了关键支持。本文将介绍一些常用的JavaScript通知库,从简单实用到高度定制化各有特色,帮助开发者在项目中轻松实现各种通知功能。欢迎订阅专栏:Ja......
  • 优先队列的实现:基于最小堆的 Java 实现
    优先队列是一种重要的数据结构,与普通队列不同,它每次从队列中取出的是具有最高优先级的元素。本文将介绍如何使用最小堆来实现优先队列,并提供详细的Java代码示例和解释。什么是优先队列?优先队列是一种抽象数据类型,其中每个元素都有一个与之相关的优先级。在删除操作中,总......
  • 大学生HTML期末大作业——HTML+CSS+JavaScript旅游网站(河南平顶山)
    HTML+CSS+JS【旅游网站】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......
  • 大学生HTML期末大作业——HTML+CSS+JavaScript购物商城(美食)
    HTML+CSS+JS【购物商城】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......
  • 【力扣】二叉树的最大深度
    给定一个二叉树root,返回其最大深度。二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。示例1:输入:root=[3,9,20,null,null,15,7]输出:3示例2:输入:root=[1,null,2]输出:2层序遍历求深度流程层序遍历是对二叉树每一层进行遍历,我们定义一个......
  • 【力扣】对称二叉树
    给你一个二叉树的根节点root,检查它是否轴对称。示例1:输入:root=[1,2,2,3,4,4,3]输出:true示例2:输入:root=[1,2,2,null,3,null,3]输出:false队列层序遍历流程进行两次同步遍历,分别从根节点的左子树和右子树开始,然后比较每个节点的值代码实现classSolution......
  • 【力扣】翻转二叉树
    给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输出:[2,3,1]示例3:输入:root=[]输出:[]递归法流程把每一个节点的左右孩子互换,就实现了整体翻转的效果。使用递归......
  • 推荐一个专业的 JavaScript 中文转拼音的库,同事都在用,小巧好用上手快(带私活)
    背景在开发过程中,我们可能会遇到将中文汉字转换成拼音或者拿到我们的汉字的首字母、韵母等等之类的业务需求,自己写一套过于麻烦,所以需要一个库来快速实现,pinyin-pro正是这样一个小巧上手快的工具库,帮助你在业务中操作汉字拼音转换来去自如介绍pinyin-pro是一个专业的Ja......
  • Java基于系统api监控文件新增事件
    得益于jvm对系统api的封装,本文的方法实际是对jvm封装后的方法的再次封装。在linux上,对于的api为inotify,在windows上,对于的api则为ReadDirectoryChangesW。本文应用的jdk版本为8。业务字段:@DatapublicclassFileMessageDto{privateLocalDateTimecreateTime;privat......