
刷题记录
文章平均质量分 95
leetcode刷题记录,按代码随想录的顺序刷的
大磕学家ZYX
这个作者很懒,什么都没留下…
展开
-
DAY55:单调栈(一)每日温度+下一个更大元素Ⅰ
本题只要想明白映射关系,因为nums1元素需要和nums2元素进行对应,对应的结果是nums2元素的下一个最大元素。因此我们可以先把nums2元素的元素值-下一个最大元素进行键值对的对应,再遍历nums1,查找Key值相同的时候,对应的结果值。原创 2023-08-02 20:51:38 · 340 阅读 · 0 评论 -
DAY56:单调栈(二)下一个最大元素Ⅱ(环形数组处理思路)
给定一个循环数组 ( 的下一个元素是 ),返回 中每个元素的 下一个更大元素 。数字 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 。示例 1:示例 2:提示:本题属于循环数组问题,循环数组的处理,我们可以将两个nums数组拼接在一起,使用单调栈计算出每一个元素的下一个最大值,最后再把结果集即result数组resize到原数组大小即可。但这种写法,修改了nums数组,而且最后还要把result数组r原创 2023-08-02 20:53:21 · 368 阅读 · 0 评论 -
DAY53:动态规划(十八)最长公共子序列+不相交的线+最大子序列和
本题最重要的是,理解当两个序列找不连续的重复子序列时,如果遍历到的两个元素数值不等,那么只需要对dp[i-1][j]和dp[i][j-1]取最大值,之前错位的相等情况就会一层层转移到当前位置!i是nums1的数组下标j是nums2的数组下标dp[i][j]是在两个数组里面分别取值,一定要搞清楚这一点!这道题目用贪心也很巧妙,动规的方法比较直接。原创 2023-07-28 14:01:00 · 349 阅读 · 0 评论 -
DAY52:动态规划(十七)子序列问题:最长递增子序列+最长连续递增序列+最长重复子数组
本题的最大值并不在dp数组末尾,因为每个数据都可能比前面的数字要小。最大长度可能是dp数组中间位置的dp[i],所以需要建个result存最大值。初始化要注意,本题每个以i为结尾的递增子序列,长度最小是1而不是0!本题难点在于,比较两个数组,得到重复且连续的最长子数组,用一维的DP数组无法同时表示两个数组的状态。我们需要用一个二维的矩阵来比较两个数组的所有状态。dp[0][j]和dp[i][0]的情况都需要单独初始化。原创 2023-07-26 15:27:37 · 950 阅读 · 0 评论 -
DAY52:动态规划(十六)买卖股票最佳时机含冷冻期/手续费+股票系列总结
冷冻期这道题,关键是要想到拆分之前题目中的,不持有股票这个状态下的两种情况,即为本来就不持有和当天刚刚卖出。因为当天刚刚卖出这种情况,会导致冷冻期。因此,当天刚刚卖出应该单独拆分为一个状态由该状态导致的冷冻期应该拆分为另一个状态。核心点还是理解状态转移的思想。本题和买卖股票Ⅱ很像,多了手续费,手续费是每次交易只需要一次,因此交易结束的时候上交。冷冻期>K次交易>两次交易>手续费,重点是理解状态转移。K次交易是仔细分析状态转移;冷冻期是分清楚每个状态,对普通状态进行拆分;原创 2023-07-26 15:16:29 · 185 阅读 · 0 评论 -
DAY51:动态规划(十五)买卖股票最佳时机Ⅲ+买卖股票最佳时期Ⅳ
DP数组的初始化问题一定要注意,并不是所有的问题都会直接初始化为0i代表的含义是下标i,而不是天数i下标0的时候,实际上代表的是第一天!i的范围是dp[0]实际上代表的是第1天持有股票时手里现金的状态。初始化主要是看dp[0]的时候对应的输入数组是不是有取值(同 198.打家劫舍 系列)当限制了买卖次数,我们又不能从递推公式看出本次买卖是第几次买卖的时候,就只能把每一次买卖的状态都列出来,新的一次买卖一定是在上一次买卖状态的基础上,进行状态转移!原创 2023-07-25 20:06:03 · 226 阅读 · 0 评论 -
DAY51:动态规划(十五)买卖股票最佳时机Ⅲ+买卖股票最佳时期Ⅳ
DP数组的初始化问题一定要注意,并不是所有的问题都会直接初始化为0i代表的含义是下标i,而不是天数i下标0的时候,实际上代表的是第一天!i的范围是dp[0]实际上代表的是第1天持有股票时手里现金的状态。初始化主要是看dp[0]的时候对应的输入数组是不是有取值(同 198.打家劫舍 系列)当限制了买卖次数,我们又不能从递推公式看出本次买卖是第几次买卖的时候,就只能把每一次买卖的状态都列出来,新的一次买卖一定是在上一次买卖状态的基础上,进行状态转移!原创 2023-07-24 19:31:21 · 157 阅读 · 0 评论 -
DAY50:动态规划(十四)买卖股票最佳时机+买卖股票最佳时机Ⅱ
给定一个数组 ,它的第 个元素 表示一支给定股票第 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 。示例 1:示例 2:提示:本题是买卖一次股票,也就是说整个过程只能买入一次和卖出一次。最直白的解决思路是暴力枚举,两层for循环,枚举每一个买股票的位置和卖股票的位置。本题目标是找出一段时间内的最大收益。贪心解法如下:时间复杂度:O(n)空原创 2023-07-24 19:29:18 · 177 阅读 · 0 评论 -
DAY49:动态规划(十三)打家劫舍+打家劫舍Ⅱ+打家劫舍Ⅲ(树形DP)
如果这么定义,那么dp数组下标范围就是!代入1–nums.size()-1的例子试一下public ://处理没有dp[0]和dp[1]的特殊情况 if(nums . size() == 0) return 0;//初始化 dp [ 0 ] = nums [ start ];//不能偷相邻的,因此直接是两个nums[]对比 //为了防止start=0的情况需要从start+2开始 for(int i = 2;i ++) {} };原创 2023-07-20 22:35:51 · 176 阅读 · 0 评论 -
DAY48:动态规划(十二)完全平方数(类似零钱兑换)+单词拆分(注意背包思路!)
本题的重要注意点就是,不要局限于判断数字(物品)是不是完全平方数,物品本身的限制条件并不复杂,完全可以直接在递推公式里面进行替换,也就是把递推公式换成这道题目的关键在于正确理解dp数组的含义。在这个代码中,dp[j]表示字符串s的前j个字符是否可以用wordDict中的词语拆分。完全背包的做法是建立哈希表,找挨个增加长度的过程中,字符串的末尾元素。看字符串里符合单词长度的末尾元素能不能在字典里找到,能找到则[i-j]这一段为true,如果dp[i-j]也是true,那么dp[i]就是true。原创 2023-07-19 03:11:41 · 284 阅读 · 0 评论 -
DAY48:动态规划(十一)爬楼梯(进阶版)+零钱兑换(理解DP数组“装满“含义)
本题看起来是一道简单题目,稍稍进阶一下其实就是一个完全背包。面试可能的情况是,先给候选人出一个爬楼梯原题,再出本题,看其表现,如果顺利写出来,进而在要求每次可以爬[1 - m](这里的意思是每次可以爬的台阶是{1,2……m},要注意确认意图)个台阶应该怎么写。顺便再考察一下两个for循环的嵌套顺序为什么target放外面,nums放里面。这就能考察对背包问题本质的掌握程度,候选人是不是刷题背公式,一眼就看出来了。递推公式:因为求的是个数,所以,把完全背包的递推公式,物品value值改为1即可。原创 2023-07-19 03:08:35 · 228 阅读 · 0 评论 -
DAY47:动态规划(十)零钱兑换Ⅱ+组合总和Ⅳ(完全背包求方案总数类型,排列+组合)
完全背包问题,在求装满背包有几种方案的时候,认清遍历顺序是非常关键的。如果求所有装满背包方案的组合数,就是外层for循环遍历物品,内层for遍历背包。如果求所有方案的排列数,就是外层for遍历背包,内层for循环遍历物品。01背包因为物品和背包遍历顺序不能颠倒,所以并不存在排列数和组合数的问题。如果面试问到for嵌套顺序颠倒计算排列数和组合数的原理,可以这么回答:物品在外的话,必须考虑完 i 的所有情况之后再考虑 i + 1,所以去掉了他们的排列关系;而。原创 2023-07-14 20:51:33 · 386 阅读 · 0 评论 -
DAY47:动态规划(九)完全背包理论基础
注意,全文说的都是对于纯完全背包问题其for循环的先后循环是可以颠倒的!但如果题目稍稍有点变化,就会体现在遍历顺序上。如果问装满背包有几种方式的话,那么两个for循环的先后顺序就有很大区别了。如果我们先遍历背包后遍历物品,得到的就是方案的排列数;先遍历物品再遍历背包,得到的就是方案组合数。518.零钱兑换Ⅱ377.组合总和Ⅳ中进行进一步的理解。【总结】用树形图和剪枝操作理解完全背包问题中组合数和排列数问题_先遍历物品后遍历背包是组合数_Calculus2022的博客-优快云博客。原创 2023-07-14 20:47:47 · 234 阅读 · 0 评论 -
DAY46:动态规划(八)01背包应用2:一和零(二维容量01背包)
01背包问题纯 0 - 1 背包 是求给定背包容量,背包的最大价值是多少。分割等和子集 是求给定背包容量,能不能装满这个背包。最后一块石头的重量 II 是求给定背包容量,尽可能装,最多能装多少。目标和 是求给定背包容量,装满背包一共有多少种方案。474.一和零 是求给定背包容量,装满背包最多有多少个物品。(本题属于二维容量的背包)原创 2023-07-14 15:34:02 · 194 阅读 · 0 评论 -
DAY46:动态规划(七)01背包应用:分割等和子集+最后一块石头重量Ⅱ+目标和
这道题目就是一道01背包应用类的题目,需要我们拆解题目,然后套入01背包的场景。01背包相对于本题,主要要理解,题目中物品是nums[i],重量是nums[i],价值也是nums[i],背包体积是sum/2。第一种写法是重量=价值的写法,相对来说好理解一些。需要注意的一点就是重量=价值,那么dp[j]代表的最大价值,一定<=j(最大重量),因为背包问题的大前提就是,放入背包的所有物品最大重量一定<=背包容量。有一堆石头,用整数数组 stones 表示。其中stones[i]表示第 i 块石头的重量。原创 2023-07-14 03:33:36 · 309 阅读 · 0 评论 -
DAY45:动态规划(六)背包问题优化:一维DP解决01背包问题
背包最大重量为4。物品重量和价值为:问背包能背的物品最大价值是多少?在我们使用二维DP数组的时候,递推公式是.如果要降为一维DP数组,就是用来表示递推。这里用j是为了j的含义和二维DP数组保持一致,下标含义都是背包的容量。原始的二维DP状态转移方程是:。这个方程意味着,对于第i个物品和当前背包容量j,我们要么选择放入这个物品,要么不放。如果放入这个物品,就需要看在容量为时,放入前i-1个物品的最大价值(也就是),如果不放入这个物品,就是。然后取这两者之间的最大值。二维背包DP数组情况示例如下图所示。我们原创 2023-07-12 20:09:05 · 753 阅读 · 0 评论 -
DAY45:动态规划(五)背包问题:01背包理论基础+二维DP解决01背包问题
对于每一种物品(纵轴上的索引i),对于每一个背包大小(横轴上的索引j),都计算出当前背包大小能存放物品的最大价值。如果当前背包的容量无法装下物品i,那么dp[i][j]的值就等于dp[i-1][j],否则,需要在“不放入物品i”和“放入物品i”这两种选择中选取价值最大的,即。这样,遍历到指定背包大小的时候,得到的就是当前背包可以装下物品的最大价值。所以说,这个DP递推公式对于每一个背包数值都适用。我们需要时刻注意,遍历到每一个物品的时候,dp[i][j]原创 2023-07-12 20:03:58 · 486 阅读 · 0 评论 -
DAY44:动态规划(四)整数拆分(递归+DP递推都可以做,注意区别和理解)
递归做法更加直观也更好理解,核心就是枚举从1–n的所有i和n-i的乘积结果,找到最大值。(实际上枚举1–n/2即可,i和n-i后半段是重复的)但是这种做法,dfs(n-i)的拆分里会有大量的重复拆分,例如dfs(5)这个数值,遍历到dfs(9),dfs(8),dfs(7)的时候都会再拆一遍,造成大量时间消耗,会超时。因此需要靠记忆化搜索进行防止重复拆分的操作,用memo数组存下每一次拆分的最终结果dfs(n)。递归之前检查如果memo数组有这个dfs(n),直接返回memo存的结果。原创 2023-07-11 15:58:03 · 1411 阅读 · 0 评论 -
DAY43:动态规划(三)不同路径+不同路径Ⅱ(初始化注意点很多,及时复盘)
就算是做过62.不同路径,在做本题也会有感觉遇到障碍无从下手。其实只要考虑到,遇到障碍dp[i][j]保持0就可以了。初始化的部分,很容易忽略了障碍之后应该都是0的情况。原创 2023-07-10 21:23:31 · 416 阅读 · 0 评论 -
DAY42:动态规划(二)斐波那契数列+爬楼梯+最小花费爬楼梯
因为题目给出的数据范围,n是一个>=1的正整数,因此我们完全不需要考虑dp[0]的情况,也不需要像题解一样令dp[0]=1,因为没有意义。斐波那契数列的定义:F(0) = 0,F(1) = 1,F(n) = F(n-1) + F(n-2) 对于所有 n >= 2。一共n阶台阶,1阶:1步,2阶:2种(2或者1+1),3阶:3种(2+1或1+2或1+1+1)4阶:5种。dp公式可以看出,最开始的dp[2]是由dp[1]和dp[0]求得。因为dp[i]是由dp[i-1]和dp[i-2]得到的,因此需要。原创 2023-07-10 21:17:14 · 450 阅读 · 0 评论 -
DAY41:贪心算法(十)监控二叉树
本题的难点首先是要想到贪心的思路,要想得到最少摄像头,就必须在叶子节点的父节点上面放摄像头。然后就是遍历和状态推导,首先要想到二叉树每个节点,都可以归结为三种状态;第二,要想到二叉树每个叶子节点的状态去推当前节点的状态,一共可以归纳为四种情况;然后通过遍历在二叉树上进行状态推导,后序遍历的同时接收下面叶子节点的状态,从而判断出当前的状态和需不需要放置摄像头。难点在于情况的分析,不要想复杂,所有的情况就是3+1种(最后一种是根节点单独考虑)原创 2023-07-07 20:01:46 · 1531 阅读 · 0 评论 -
DAY40:贪心算法(九)单调递增的数字(贪心的思路)
本题只要想清楚个例,例如98,一旦出现的情况(非单调递增),首先想让strNum[i - 1]减一,strNum[i]赋值9,这样这个整数就是89。就可以很自然想到对应的贪心解法了。想到了贪心,还要考虑遍历顺序,只有从后向前遍历才能重复利用上次比较的结果。最后代码实现的时候,也需要一些技巧,例如用一个flag来标记从哪里开始赋值9。原创 2023-07-06 16:55:46 · 1184 阅读 · 0 评论 -
DAY1:二分查找+移除元素
是**原创 2023-05-10 20:33:28 · 603 阅读 · 1 评论 -
DAY2:有序数组平方+滑动窗口+螺旋矩阵
Spiral Matrix II (模拟法,设定边界,代码简短清晰) - 螺旋矩阵 II - 力扣(LeetCode)public ://初始化数组 vector < vector < int >> res(n , vector < int >(n));i <= right;++ top;-- right;i >= left;-- bottom;i >= top;++ left;} };原创 2023-05-12 00:51:47 · 262 阅读 · 1 评论 -
DAY3:链表(一):链表基础知识+移除链表元素
/ 单链表的定义 struct ListNode {int val;//节点上储存的元素 ListNode * next;//指向下一个节点的指针 ListNode(int x) : val(x) , next(NULL) {//节点的构造函数 } }//定义指针,指向链表对象(虚拟头节点用法)所以如果不定义构造函数使用默认构造函数的话,在初始化的时候就不能直接给变量赋值!首先,你需要一个指针来找到要删除的节点。这个指针通常是通过遍历链表得到的。原创 2023-05-13 19:50:00 · 2720 阅读 · 0 评论 -
DAY3(二)设计链表
在C++和许多其他语言中,ListNode这样的数据结构并不是内置的,所以在使用它们时,通常需要自己定义。例如,本题目中,就定义了一个ListNode类来表示链表的节点。这个类包含了节点的值(val)和一个指向下一个节点的指针(next在某些特定的情况下,如果你的代码库或者项目中经常需要使用链表,你可以将ListNode类定义在一个公共的头文件中,这样在需要使用链表的时候,只需要包含这个头文件就可以了,不需要每次都重新定义。原创 2023-05-14 21:46:07 · 168 阅读 · 0 评论 -
DAY5 哈希表(一):哈希表基础+数组练习+set容器练习
数组:数组是最基本的数据结构之一,它是由一系列相同类型的元素组成的,并且每个元素都有一个索引来标识它在数组中的位置。数组的优点是访问元素的速度非常快,因为只需要通过索引就可以直接找到元素,不需要遍历整个数组。但是,数组的大小在创建时就已经固定,不能动态增加或减少。Set:Set是一个不包含重复元素的集合。它的主要用途是进行存在性检查,也就是检查一个元素是否存在于集合中。Set通常是通过哈希技术实现的,所以检查元素是否存在的操作非常快,时间复杂度接近O(1)。原创 2023-05-15 18:24:06 · 415 阅读 · 0 评论 -
DAY5:哈希表(二):快乐数+两数之和
为什么会想到用哈希表哈希表为什么用map本题map是用来存什么的map中的key和value用来存什么的。原创 2023-05-16 01:46:27 · 150 阅读 · 4 评论 -
DAY6:哈希表(三):四数相加+三数之和+四数之和,解决溢出和剪枝操作的问题,注意去重判定的边界
虽然两层for循环就可以确定 a 和b 的数值了,可以使用哈希法来确定 0-(a+b) 是否在 数组里出现过,其实这个思路是正确的,但是我们有一个非常棘手的问题,就是题目中说的。整体思路:i先不动,left和right向中间移动,移动的过程中收割三数之和为0的三元组,直到left和right相遇,再移动下一个i。由于我们定义的三元组,格式是{i,left,right},结果集里面的元素是可以重复的,所以,i的去重必须和i-1进行对比,而不是和i+1进行对比。中,键(key)是唯一的。因此,target!原创 2023-05-17 17:37:19 · 433 阅读 · 0 评论 -
DAY7 字符串(一):字符串基础+反转字符串
string s1;// 默认初始化,s1是一个空字符串 string s2 = s1;// s2是s1的副本,注意s2只是与s1的值相同,并不指向同一段地址 string s3 = "hiya";// s3是该字符串字面值的副本 string s4(10 , 'c');// s4的内容是 "cccccccccc",这里真的是10个c,没有结束符'\0' return 0;返回的是size_type类型,这在大多数情况下是一个无符号整数。如果我们的**int i为负数**,原创 2023-05-18 13:23:43 · 176 阅读 · 0 评论 -
DAY8 字符串(二)反转字符串Ⅱ+反转字符串里的单词,反转单词的逻辑要特别注意
public ://自己写的reverse也是左闭右开的,但是要注意传入的参数问题 for(int i = start , j = end - 1;i < j;//这里就直接左右指针逼近 //注意左闭右开 swap(s [ i ] , s [ j ]);//自带库函数是左闭右开的,i+k不包含在内,不存在越界问题 //注意reverse的语法,这里的::reverse是调用了std::reverse、 //如果只写reverse,就是自己类中定义的函数 } else {原创 2023-05-19 19:30:59 · 208 阅读 · 0 评论 -
DAY8:字符串(三)替换空格+字符串基础补充
而且,如果替换后的字符串长度和原来不一样,那么还需要移动后面的字符,这个过程也是O(n)的。在C++中,提供一个string类,string类会提供 size接口,可以用来判断string类字符串是否结束,就不用’\0’来判断是否结束。字符串是若干字符组成的有限序列,也可以理解为是一个字符数组,但是很多语言对字符串做了特殊的规定,接下来我来说一说C/C++中的字符串。实际上是一个包含6个字符的数组,字符是:‘H’, ‘e’, ‘l’, ‘l’, ‘o’, 和 ‘\0’。但是,如果你用的是其他容器,比如**原创 2023-05-19 20:55:32 · 258 阅读 · 0 评论 -
DAY9:栈和队列(一):栈和队列基础
栈 - OI Wiki (oi-wiki.org)栈是 OI 中常用的一种线性数据结构,请注意,本文主要讲的是栈这种数据结构,而非程序运行时的系统栈/栈空间。栈的修改是按照后进先出的原则进行的,因此栈通常被称为是后进先出(last in first out)表,简称 LIFO 表。队列(queue)是一种具有「先进入队列的元素一定先出队列」性质的表。由于该性质,队列通常也被称为先进先出(first in first out)表,简称 FIFO 表。原创 2023-05-22 12:43:12 · 198 阅读 · 0 评论 -
DAY9:栈和队列(二)用栈实现队列+用队列实现栈
232.用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from原创 2023-05-22 21:47:17 · 127 阅读 · 2 评论 -
DAY10:栈和队列(三)有效括号判断+删除相邻重复元素
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。示例 1:思路:括号匹配是使用栈解决的经典问题。题意其实就像我们在写代码的过程中,要求括号的顺序是一样的,有左括号,相应的位置必须要有右括号。如果还记得编译原理的话,编译器在词法分析的过程中处理括号、花括号等这个符号的逻辑,也是使用了栈这种数据结构。由于栈结构的特殊性,非常适合做对原创 2023-05-22 21:53:22 · 137 阅读 · 0 评论 -
DAY11:栈与队列(四)逆波兰表达式
最后一个元素也加入栈里有助于避免特殊处理。之前遇到的题目中,括号匹配和相邻重复字符删除,都是。原创 2023-05-23 19:21:01 · 206 阅读 · 0 评论 -
DAY11:栈和队列(五):滑动窗口最大值(自定义单调队列)
所以是O(k)。原创 2023-05-24 13:55:27 · 83 阅读 · 0 评论 -
DAY12:栈和队列(六):前k个高频元素(大/小顶堆)
这里,T是存储元素的类型,Container是底层容器类型,Compare是比较元素大小的函数对象。堆并不一定以pair的格式存储T,它可以存储任意类型的数据。例如,可以是intstring、自定义类等。如果存储的T是pair,那么通常是因为我们同时需要存储两种信息,如值及其频率、值及其索引等。堆的定义取决于它的比较函数。在C++的STL库中,默认实现的是大顶堆,也就是说堆顶元素是最大的元素。在的定义中,第三个参数是一个比较对象,它决定了堆的性质(大顶堆或小顶堆)。如果比较函数定义为“小于”(原创 2023-05-24 20:40:31 · 417 阅读 · 0 评论 -
DAY13:二叉树(一):二叉树理论基础
二叉搜索树对节点的结构没有要求,但是对节点上的元素顺序有要求。力扣的核心代码模式是把数据结构都定义好了,但是面试还是会面临二叉树节点定义的问题。基本数据结构的定义一定要可以手写出来,并且不出错!//定义二叉树的节点 struct TreeNode {int val;//写构造函数,new一个节点的时候方便对其初始化 TreeNode(int t) : val(t) , left(NULL) , right(NULL) {} };原创 2023-05-25 15:52:57 · 153 阅读 · 0 评论 -
DAY14:二叉树(二)前中后序递归遍历+层序遍历
定义根节点结构体的时候,构造函数的意义就是在主函数构造二叉树时方便传入节点数值int value;} };//终止条件 if(cur == NULL) {return;} //单层逻辑:中左右 vec . push_back(cur -> value);//指针表示 preTrav(cur -> left , vec);//注意另一个参数不能忘记传入 preTrav(cur -> right , vec);} //注意主函数的写法 int main() {原创 2023-06-03 01:02:18 · 119 阅读 · 0 评论