题目

给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?

示例:

输入: 3

输出: 5

解释:

给定 n = 3, 一共有 5 种不同结构的二叉搜索树:

   1         3     3      2      1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/unique-binary-search-trees

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

  • 指定节点个数的BST的种类是固定的,可以容易想到递归:左子树*右子树 且每个节点轮流做根结点 即得到所有可能。使用DP来做。
  • 以三个节点为例,用dp[3]表示

    dp[3]=dp[0]dp[2]+dp[1]dp[1]+dp[2]*dp[0]
  • 故转移方程:

    dp[n]+=dp[i]*dp[n-i-1] (i=0,1,...n-1)

其他

  • 卡特兰数是组合数学中一个常出现在各种计数问题中出现的数列。

  • 本题的dp数组即是卡特兰数

代码

class Solution {
public int numTrees(int n) {
if (n <= 0) {
return 0;
}
if (n == 1) {
return 1;
} int[] dp = new int[n + 1];
dp[0] = 1;
dp[1] = 1;
for (int nodeCnt = 2; nodeCnt <= n; ++nodeCnt) {// nodeCnt个节点的BST
for (int j = 0; j < nodeCnt; ++j) { // 根的左子树有j个节点
dp[nodeCnt] += dp[j] * dp[nodeCnt - j - 1];
}
} return dp[n];
}
}

[LeetCode]96. 不同的二叉搜索树(DP,卡特兰数)的更多相关文章

  1. LeetCode 96 - 不同的二叉搜索树 - [DP]

    假定 $f[n]$ 表示有 $n$ 个节点的二叉树,有多少种不同结构. 因此 $f[n] = \sum_{i=0}^{n-1} (f[i] \times f[n-1-i])$,选一个节点作为根节点,那 ...

  2. Java实现 LeetCode 96 不同的二叉搜索树

    96. 不同的二叉搜索树 给定一个整数 n,求以 1 - n 为节点组成的二叉搜索树有多少种? 示例: 输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 ...

  3. Leetcode 96. 不同的二叉搜索树

    题目链接 https://leetcode.com/problems/unique-binary-search-trees/description/ 题目描述 给定一个整数 n,求以 1 ... n ...

  4. LeetCode 96. 不同的二叉搜索树(Unique Binary Search Trees )

    题目描述 给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? 示例: 输入: 输出: 解释: 给定 n = , 一共有 种不同结构的二叉搜索树: \ / / / \ \ / / ...

  5. LeetCode 96——不同的二叉搜索树

    1. 题目 2. 解答 以 \(1, 2, \cdots, n\) 构建二叉搜索树,其中,任意数字都可以作为根节点来构建二叉搜索树.当我们将某一个数字作为根节点后,其左边数据将构建为左子树,右边数据将 ...

  6. leetcode-95-不同的二叉搜索树(卡特兰数)

    题目描述: 方法一:动态规划 O(n^2) O(n) class Solution: def numTrees(self, n: int) -> int: dp = [0]*(n+1) dp[0 ...

  7. Leetcode:96. 不同的二叉搜索树

    Leetcode:96. 不同的二叉搜索树 Leetcode:96. 不同的二叉搜索树 题目在链接中,点进去看看吧! 先介绍一个名词:卡特兰数 卡特兰数 卡特兰数Cn满足以下递推关系: \[ C_{n ...

  8. 【JavaScript】Leetcode每日一题-二叉搜索树的范围和

    [JavaScript]Leetcode每日一题-二叉搜索树的范围和 [题目描述] 给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和. 示例1: 输入: ...

  9. 【python】Leetcode每日一题-二叉搜索树节点最小距离

    [python]Leetcode每日一题-二叉搜索树节点最小距离 [题目描述] 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 . 示例1: 输入:root = [4 ...

随机推荐

  1. 在K3s上使用Kong网关插件,开启K3s的无限可能!

    我的工作中很重要的一部分是参加各种各样的技术会议.最近参加的是去年11月的北美KubeCon,在会议的最后一天,所有人都焦头烂额,我也一直机械地向不同的人重复我的自我介绍.后来,我已经十分烦躁,决定逃 ...

  2. [PyTorch 学习笔记] 1.2 Tensor(张量)介绍

    本章代码: https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson1/tensor_introduce1.py https: ...

  3. Java泛型详解,通俗易懂只需5分钟

    转载出处:http://www.weixueyuan.net/view/6321.html 我们知道,使用变量之前要定义,定义一个变量时必须要指明它的数据类型,什么样的数据类型赋给什么样的值. 假如我 ...

  4. eclipse项目文件夹整理

    1.点击倒三角 2.系统默认为Projects,选择第二个working sets 3.点击Configure Working Sets,点new 4.点击后,选中点Add 5.添加一个名字,Fins ...

  5. python基础 Day1

    Python开发笔记 Day1 1.cpu内存 硬盘 操作系统 cpu:计算机的运算和计算中心,相当于人类大脑 内存:暂时存储数据,临时加载数据应用程序,4G(内存速度快,断电即消失) 硬盘:磁盘,长 ...

  6. python 用 prettytable 输出漂亮的表格

    原文链接:https://linuxops.org/blog/python/prettytable.html #!/usr/bin/python #**coding:utf-** import sys ...

  7. HTTP基础 --响应

    响应,由服务端返回给客户端,分为三部分:响应状态码(Response Status Code),响应头(Response Headers)和响应体(Response Body). 响应状态码 响应服务 ...

  8. 基于伪分布式Hadoop搭建Hive平台详细教程

    一.搭建环境的前提条件 环境:Linux系统 Hadoop-2.6.0 MySQL 5.6 apache-hive-2.3.7 这里的环境不一定需要和我一样,基本版本差不多都ok的,所需安装包和压缩包 ...

  9. 用Python的Pandas和Matplotlib绘制股票KDJ指标线

    我最近出了一本书,<基于股票大数据分析的Python入门实战 视频教学版>,京东链接:https://item.jd.com/69241653952.html,在其中给出了MACD,KDJ ...

  10. C#封装定时执行任务类

    a.日常开发中经常会遇到定时去执行一些操作,比如定时更新数据.A类需要做我们写个Timer定时去取数据,这时候B类,C类也需要做这样的事情,是不是需要写三次重复代码? 这时候把timer封装成一个帮助 ...