LeetCode 95. Unique Binary Search Trees II&96. Unique Binary Search Trees--动态规划,二叉树

金仓数据库KCM认证考试介绍【2025年4月更新】 金仓数据库认证资深专家KCM认证考试介绍 阅读详情

题目链接

96. Unique Binary Search Trees

Given n, how many structurally unique BST's (binary search trees) that store values 1...n?

For example,
Given n = 3, there are a total of 5 unique BST's.

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

解:数组dp[n]代表存储1...n的异构BST的个数,根节点有n种情况,分别考虑左右子树,根节点为1时,有dp[0]*dp[n-1]个(dp[0] = 1),根节点为2时,有dp[1]*dp[n-2]个,...,根节点为n时,有dp[n-1]*dp[0]个,代码:

class Solution {
public:
    int numTrees(int n) {
        int *dp = new int[n+1];
        dp[0] = 1;
        for (int i = 1; i < n+1; i++) {
            dp[i] = 0;
            for (int j = 0; j < i; j++) {
                dp[i] += dp[j] * dp[i-1-j];   
            }
        }
        return dp[n];
    }
};


题目链接

95. Unique Binary Search Trees II

Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1...n.

For example,
Given n = 3, your program should return all 5 unique BST's shown below.

   1         3     3      2      1
    \       /     /      / \      \
     3     2     1      1   3      2
    /     /       \                 \
   2     1         2                 3
解:看到函数的定义可知是将所有BST的根节点放在一个vector中返回,定义一个vector<vector<TreeNode*> > dp;  dp[n]依然能够由dp[0]...dp[n-1]得到,需要额外写一个copy函数,作用是树的复制,另外复制的同时可以将每个节点同时加上一个值,比如得到dp[n]时,当根节点是3,其右孩子就是dp[n-3]每个节点加上3,代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* copy(TreeNode* input, int num) {
        if (input == NULL) return NULL;
        TreeNode* output = new TreeNode(input->val+num);
        TreeNode* left = copy(input->left, num);
        TreeNode* right = copy(input->right, num);
        output->left = left;
        output->right = right;
        return output;
    }
    vector<TreeNode*> generateTrees(int n) {
        vector<vector<TreeNode*> > dp;
        vector<TreeNode*> first;
        if(n == 0) return first;
        TreeNode* temp = NULL;
        first.push_back(temp);
        dp.push_back(first);
        TreeNode* temp1 = new TreeNode(1);
        vector<TreeNode*> second;
        second.push_back(temp1);
        dp.push_back(second);
        for (int j = 2; j <= n; j++) {
            vector<TreeNode*> i;
            for (int t = 1; t <= j; t++) {
                int sizeRight = dp[j-t].size();
                int sizeLeft = dp[t-1].size();
                for (int l = 0; l < sizeLeft; l++) {
                    for (int r = 0; r < sizeRight; r++) {
                        TreeNode* temp = new TreeNode(t);
                        temp->right = copy(dp[j-t][r], t);
                        temp->left = copy(dp[t-1][l], 0);
                        i.push_back(temp);
                    }
                }
            }
            dp.push_back(i);
        }
        return dp[n];
    }
};



GD32官方资料学习体系(主要包括MCU选型、原理图PCB设计、软件开发入门及用户手册等) 大部分还未更新,先占个坑,日后更新…… 目前国外芯片涨价涨的离谱(就是在说ST),国内最好的替代就是兆易创新出的系列芯片了。但是官方资料繁杂,小白上手不易,因此边入门边记录,也给后来者根据官方资料可以有一个较为完整的学习体系。 阅读详情

相关推荐

从零理解Brep:用Python玩转3D建模的边界表示法(附OpenCASCADE示例)

本文深入解析了边界表示法(Brep)在3D建模中的应用,通过Python和OpenCASCADE的实战示例,详细介绍了Brep的核心数据结构、布尔运算、网格转换及3D打印优化技巧。适合CAD设计、3D打印和计算机图形学领域的开发者学习与实践。

n4o5p6q7r的博客 425

(Leetcode 95+96)Unique Binary Search Trees 动态规划 分治

1. (Leetcode 96)Unique Binary Search Trees第一道题目,求1-n的数字组成BST的所有方法数 BST即二叉排序树,其先序遍历序列为从小到大排列。题目原文: Given n, how many structurally unique BST’s (binary search trees) that store values 1…n?动态规划,分治

白辰甲 2103

告别同质化!用PyTorch Geometric手把手实现RGCN处理多关系图数据(附实战代码)

本文详细介绍了如何使用PyTorch Geometric实现关系图卷积网络(RGCN)处理多关系图数据,特别适用于社交网络分析、推荐系统等场景。通过实战代码演示了从数据加载、模型构建到训练优化的完整流程,帮助开发者高效处理异构图数据,提升模型性能。

weixin_30781433的博客 259

leetcode 95. Unique Binary Search Trees II-分治算法|动态规划|卡特兰数

原题链接:95. Unique Binary Search Trees II 【思路】 这是一道经典的分治算法题目,相比回溯算法,虽然都是递归中包含循环,循环中嵌套递归。但是,分治算法会利用到前面相互独立的子问题的中间结果,并将子问题层层串接在一起。最外层循环,将子问题划分为和为 n 的两个子问题,然后下一层递归又分别将子问题划分为更小的子问题,直到小问题小到只有大小为1的子问题,再将小问题的

hdtopku 3446

工控上位机开发学习路线与核心技术解析

工控上位机开发是工业自动化领域的关键技术,通过计算机软件实现对工业设备的监控与控制。其核心在于掌握工业通信协议(如Modbus、OPC UA)、数据处理算法和可视化开发三大能力。上位机系统需要高效解析设备通信协议,处理实时数据,并提供直观的人机交互界面。在智能制造浪潮下,掌握C#语言和工业协议开发能力成为工程师的核心竞争力。典型应用场景包括生产线监控、设备远程运维等。本文基于工业现场实践经验,详解从协议解析到界面优化的全链路开发要点,特别针对Modbus协议调优、WPF性能优化等高频问题提供解决方案。

weixin_30376083的博客 550

Windows7 64位系统PL2303驱动无法安装问题解决

问题描述:电脑安装的是Win7 64位的旗舰版,USB to RS232这种线很简单,对于笔记本如果要用串口,就不能少了它了。USB to RS232转换芯片种类繁多,常见的有ch340,0108,PL2303,FT232等,这里面FT232的应该价格是相对比较贵的,因为FTDI的芯片本身比较贵。由于买了一根PL2303芯片的USB to RS232转换线,于是插上后发现驱动无法安装,又是在设备管

suxiang198的博客 5809

LeetCode95. Unique Binary Search Trees II(C++)

Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 ... n. Example: Input: 3 Output: [   [1,null,3,2],   [3,2,null,1],   [3,1,null,null,2],   [2,1,3...

qq_41562704的博客 223

MBIST --- PATR2.Memorybist 测试流程

mem bist作为现在design设计中不可或缺的DFT设计内容,越发重要。本章节主要介绍mem bist的flow,如何在tessent中实现mbist以及tessent中的一些命令和mode。

sinat_27691203的博客 6004

Leetcode95. Unique Binary Search Trees II and I

分析 这道题目采用二分法和递归方法·解决, 1&amp;amp;lt;=i&amp;amp;lt;=n, i代表root, [1,i-1] 为有节点 [i, n] 为右节点,然后左右两边又不断分治的方法解决 分而治之用于归并排序 类似于这种方法就是 代码书写流程 递归递归判断条件,递归的出口文件 对原始问题进行处理,处理左边,处理右边 合并两边结果 从宏观上把握这种情况 归并排序对算法: ...

qq_28350997的博客 399

Win11网络卡顿?用Wireshark抓包5分钟定位问题(保姆级实战)

本文详细介绍了如何使用Wireshark在Win11系统中快速定位网络卡顿问题。通过5分钟抓包分析,作者成功发现TCP重传率高达37%的罪魁祸首,并提供了从准备工作到实战分析的保姆级教程,帮助用户解决游戏卡顿、视频会议延迟等常见网络问题。

weixin_28839629的博客 306

实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)

导读 本文主要介绍使用OpenCV对扫描文本矫正的应用实例及详细实现步骤。 背景介绍 在使用打印机或扫描仪扫描文档时,由于摆放位置差异难免造成扫描文档的倾斜。本文将使用OpenCV将倾斜的文档矫正水平并去除黑边。 实现步骤 本文只针对包含大部分文字的文档做倾斜矫正,思路来源是大部分文字倾斜后同一行的也在同一条直线,通过拟合直线计算文本倾斜角度,然后旋转来实现文本倾斜矫正。 详细步骤: ①加载倾斜图像 ②灰度转换+腐蚀+膨胀 ③Canny边缘检测 + 霍夫线变换检测直线 ...

Color Space的博客 3399

[C++] LeetCode 95. 不同的二叉查找树 II

题目 给定一个整数 n,生成所有由 1…n 为节点组成的不同的二叉查找树。 例如, 给定 n = 3,则返回所有 5 种不同形态的二叉查找树: 题解 这道题目其实也是一道动态规划的题目,以其中一个点为根节点,得到左子树根节点的集合和右子树根节点的集合,然后组合起来就是左右的可能情况 代码 /** * Definition for a binary tree node. *...

沧海漂游的博客 937

实干派!网易易盾增强版滑块验证码,全方位讲解识别思路(含源码)

该验证码是异形滑块验证码中的一种,缺口旋转+偏移的处理需要你有很好的图像处理知识,能很好的处理透明通道,同时,该验证码需要你能很好的处理缺口和背景之间匹配的关系,该验证码的处理难点就是两个缺口之间如何找到正确的,两个检测框都有很强的相似度,且加上背景图的干扰,在图像处理和有优化上难度大大增加。

码王吴彦祖的博客 2015

LeetCode(96) Unique Binary Search Trees

题目Given n, how many structurally unique BST’s (binary search trees) that store values 1…n?For example, Given n = 3, there are a total of 5 unique BST’s. 分析此题与上题本质相同,LeetCode 95 Unique Binary Search T

指尖飞舞 1043

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

( Leetcode 95 ) Unique Binary Search Trees II

题目:Unique Binary Search Trees II Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1...n. For example, Given n = 3, your program should return

willduan的博客 6566

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

95 Unique Binary Search Trees II

题目链接:https://leetcode.com/problems/unique-binary-search-trees-ii/题目:Given n, generate all structurally unique BST's (binary search trees) that store values 1...n.For example, Given n = 3, your program

再见了,过去的名字,新的奋斗开始啦! 5655

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

95. Unique Binary Search Trees II**

95. Unique Binary Search Trees II** https://leetcode.com/problems/unique-binary-search-trees-ii/ 题目描述 Given an integer n, generate all structurally unique BST’s (binary search trees) that store values...

珍妮的选择的博客 429

leetcode【95】Unique Binary Search Trees II

问题描述 Given an integern, generate all structurally uniqueBST's(binary search trees) that store values 1 ...n. 大概意思就是给定一个正整数n,然后写出所有可能的二叉树。 解决方案 递归方法: 二叉树由左子树和右子树组成,那么左子树和右子树就是子问题。递归过程中每次选一个点...

fanyuwgy的博客 169

[LeetCode] 95. Unique Binary Search Trees II

原题链接:https://leetcode.com/problems/unique-binary-search-trees-ii/ 1. 题目介绍 Given an integer n, generate all structurally unique BST’s (binary search trees) that store values 1 … n. 给出一个整数n,返回从1到n的所有数形成...

Ber03的博客 288

Leetcode 96 Unique Binary Search Trees

给出n,返回结构上不重复的二叉查找树的个数(每个二叉树都存储1,2,3,...,n)。 举例, 给出n=3,共有5种各异的二叉查找树,返回5。

(ง •̀_•́)ง 414

Leetcode 95 Unique Binary Search Trees II

给出n,生成所有存储1-n共n个数的结构上不重复的二叉查找树。

(ง •̀_•́)ง 589

LeetCode --- 95. Unique Binary Search Trees II

题目链接:Unique Binary Search Trees II Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For example, Given n = 3, your program should return all 5 unique B

makuiyu的专栏 1099

【LeetCode】95. Unique Binary Search Trees II 解题报告(Python)

题目分析: 给定一个整数 n,生成所有由 1 … n 为节点所组成的二叉搜索树。 示例: 输入: 3 输出: [ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,1,3], [1,null,2,null,3] ] 解释: 以上的输出对应以下 5 种不同结构的二叉搜索树: 解题思路: 这一题可以用递归或递归+动态规划解,我们先说递归帮助理解,这一...

L141210113的专栏 559

LeetCode 95. Unique Binary Search Trees II

Problem Description: Given an integern, generate all structurally uniqueBST's(binary search trees) that store values 1 ...n. 给定一个整数n,生成所有不同的二叉搜索树,其节点存储所有从1到n的值。 此题是96题的follow up,96题采用动态规划...

dianguju2418的博客 125

leetcode-95. Unique Binary Search Trees II

leetcode-95. Unique Binary Search Trees II题目: 这题第二遍做还是没做出来,我总是想怎么用动态规划区解,主要还是偷看了tag。想在n-1的基础上找n很久都没找到。这里实际上并不能算是DP算法。应该还是DFS方法或者分治算法。 思路就是针对1-n之间的每个i去找其左子节点和右子节点,分别形成TreeNode数组然后在数组里的互相匹配构成上一层的数组。算法设计的非常漂亮。

千念飞羽的专栏 656

LeetCode - 96/95 - Unique Binary Search Trees

96. Unique Binary Search Trees Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For example, Given n = 3, there are a total of 5 unique BST's.

j6635788的博客 232
上一篇: GitHub协同开发fork
下一篇: LeetCode 279. Perfect Squares--动态规划
monkey_rose
博客等级 码龄10年 9粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值