自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 代码随想录刷题第60天|Leetcode84柱状图中最大的矩形

寻找左边时从左到右遍历,t = i - 1,如果heights[t] >= heights[i],说明大了,令 t = minfirstleft[t],继续寻找比当前值小的下标,每个下标都记录着第一个小于自己的下标,如果没有则返回-1。如果当前元素小于栈顶元素,当栈不为空且当前元素一直小于栈顶元素时,用mid记录栈顶元素然后弹出,w = i - st.top() - 1, h = heights[mid];如果当前元素等于栈顶元素,去掉栈顶元素,把当前元素下标入栈;

2023-07-22 11:34:01 87

原创 代码随想录刷题第59天|Leetcode503下一个更大元素II、Leetcode42 接雨水

把每一个位置的左边最高高度记录在一个数组上(maxLeft),右边最高高度记录在一个数组上(maxRight),这样就避免了重复计算。2、遇到相同的元素,更新栈内下标,就是将栈里元素(旧下标)弹出,将新元素(新下标)加入栈中。每一列雨水的高度,取决于,该列 左侧最高的柱子和右侧最高的柱子中最矮的那个柱子的高度。1、如果当前遍历的元素(柱子)高度小于栈顶元素的高度,就把这个元素加入栈中。3、使用单调栈,按行计算,是通过 长 * 宽 来计算雨水面积的。雨水的宽度是 凹槽右边的下标 - 凹槽左边的下标 - 1。

2023-07-20 10:03:51 183

原创 代码随想录刷题第58天|Leetcode739每日温度、Leetcode496下一个更大元素

如果出现过,即umap.count(nums2[st.top()]) > 0,result[umap[nums2[st.top()]]] = nums2[i];遍历nums2,如果nums2[i] > nums2[st.top()],再判断nums2[st.top()]是否在nums1数组里出现过。如果 t[i] 大于 t[栈顶元素],把栈顶元素弹出,result[st.top()] = i - st.top();如果 t[1] > t[0],则要把0弹出把1入栈,同时result[0] = 1 - 0;

2023-07-17 18:12:19 120

原创 代码随想录刷题第57天|Leetcode647回文子串、Leetcode516最长回文子序列

如果s[i]与s[j]不相同,说明s[i]和s[j]的同时加入 并不能增加[i,j]区间回文子序列的长度,那么分别加入s[i]、s[j]看看哪一个可以组成最长的回文子序列。那么dp[i][j]一定是取最大的,即:dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);如果s[i]与s[j]相同,那么dp[i][j] = dp[i + 1][j - 1] + 2;dp[i][j]:字符串s在[i, j]范围内最长的回文子序列的长度为dp[i][j]。

2023-07-16 14:42:19 213

原创 代码随想录刷题第56天|Leetcode583两个字符串的删除操作、Leetcode72编辑距离

因为 dp[i][j - 1] + 1 = dp[i - 1][j - 1] + 2,所以递推公式可简化为:dp[i][j] = min(dp[i - 1][j] + 1, dp[i][j - 1] + 1);最后当然是取最小值,dp[i][j] = min({dp[i - 1][j - 1] + 2, dp[i - 1][j] + 1, dp[i][j - 1] + 1});当word1[i - 1] 与 word2[j - 1]相同的时候,dp[i][j] = dp[i - 1][j - 1];

2023-07-15 18:05:27 240

原创 代码随想录刷题第55天|Leetcode392判断子序列、Leetcode115不同的子序列

从dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j] 和 dp[i][j] = dp[i - 1][j] 可以看出 dp[i][j] 从左上方和正上方推出来,遍历的时候一定是从上到下,从左到右。当s[i - 1] 与 t[j - 1]不相等时,dp[i][j]只有一部分组成,不用s[i - 1]来匹配,即:dp[i - 1][j];所以当s[i - 1] 与 t[j - 1]相等时,dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];

2023-07-14 12:25:13 63

原创 代码随想录刷题第53天|Leetcode1143最长公共子序列、Leetcode1035不相交的钱、LeetCode53最大子数组和

text1[i - 1] 与 text2[j - 1]相同,那么找到了一个公共元素,所以dp[i][j] = dp[i - 1][j - 1] + 1;text1[i - 1] 与 text2[j - 1]不相同,dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j]。

2023-07-13 22:01:09 72

原创 代码随想录刷题第52天|LeetCode300最长递增子序列、 LeetCode674最长连续递增序列、LeetCode718最长重复子数组

如果定义dp[i][j]为 以下标i为结尾的A,和以下标j 为结尾的B,实现起来会麻烦一点,需要单独处理初始化部分,如果nums1[i] 与 nums2[0] 相同的话,对应的 dp[i][0]就要初始为1。举个例子A[0]如果和B[0]相同的话,dp[1][1] = dp[0][0] + 1,只有dp[0][0]初始为0,正好符合递推公式逐步累加起来。但dp[i][0] 和dp[0][j]要初始值,因为 为了方便递归公式dp[i][j] = dp[i - 1][j - 1] + 1;

2023-06-12 12:26:34 403 1

原创 代码随想录刷题第51天|LeetCode309最佳买卖股票时机含冷冻期、LeetCode714买卖股票最佳时机含手续费

今天卖出,前一天一定持有股票,只能是dp[i - 1][0] + prices[i];今天买入,前一天可能是dp[i - 1][1]或dp[i - 1][3];dp[0][1]初始化为0才合理。今天是冷冻期,前一天刚卖出,只能是dp[i - 1][2]。同理dp[0][2],dp[0][3]也初始化为0。前一天就是这个状态dp[i - 1][1];不持有股票(今天卖出,或前一天就不持有了)前一天是冷冻期dp[i - 1][3];前一天就持有,dp[i-1][0];

2023-06-11 17:48:57 222

原创 代码随想录刷题第50天|LeetCode123买卖股票的最佳时机III,LeetCode188买卖股票的最佳时机IV

操作二:第i天没有操作,而是沿用前一天买入的状态,即:dp[i][1] = dp[i - 1][1]操作一:第i天卖出股票了,那么dp[i][2] = dp[i - 1][1] + prices[i]操作二:第i天没有操作,沿用前一天卖出股票的状态,即:dp[i][2] = dp[i - 1][2]操作一:第i天买入股票了,那么dp[i][1] = dp[i-1][0] - prices[i]操作,相当于第0天第一次买入了,第一次卖出了,然后再买入一次,dp[0][3] = -prices[0];

2023-06-10 16:27:51 263

原创 代码随想录刷题第49天|LeetCode121买卖股票的最佳时机,LeetCode122买卖股票的最佳时机II

如果第i-1天持有股票,dp[i][0]保持现状,dp[i][0] = dp[i-1][0];第i天卖出股票,dp[i][1] = dp[i-1][0] + prices[i];如果前一天就持有股票,保持前一天状态,dp[i][0] = dp[i-1][0];dp[i][0],dp[i][1]由 dp[0][0]、dp[0][1]推出,第i-1天不持有股票,dp[i][1] = dp[i-1][1];第i天买入股票,dp[i][0] = -prices[i];

2023-06-09 23:52:44 30

原创 代码随想录刷题第48天|LeetCode198打家劫舍、LeetCode213打家劫舍II、LeetCode337打家劫舍III

不偷该节点,则左右孩子要偷,每个孩子里偷一个最大的,int val2 = max(left[0],left[1]) + max(right[0], right[1]);然后dp[i]取最大值,即dp[i] = max(dp[i - 2] + nums[i], dp[i - 1])。考虑不包含首尾元素, 考虑包含首元素不包含尾元素, 考虑包含尾元素不包含首元素。如果偷第i房间,那么dp[i] = dp[i - 2] + nums[i];如果不偷第i房间,那么dp[i] = dp[i - 1];

2023-06-08 18:10:28 494

原创 代码随想录刷题第46天|LeetCode139单词拆分、多重背包

"apple", "pen" 是物品,那么我们要求 物品的组合一定是 "apple" + "pen" + "apple" 才能组成 "applepenapple"。"apple" + "apple" + "pen" 或者 "pen" + "apple" + "apple" 是不可以的,那么我们就是强调物品之间顺序。本题其实我们求的是排列数,为什么呢。问能否能装满背包(或者最多装多少):dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);完全背包每件物品可以取无限次;

2023-06-07 22:52:01 506

原创 代码随想录刷题第45天|LeetCode70爬楼梯、LeetCode322零钱兑换、LeetCode279完全平方数

凑足总额为j - coins[i]的最少个数为dp[j - coins[i]],那么只需要加上一个钱币coins[i]即dp[j - coins[i]] + 1。本题爬1个、爬两个台阶中的1、2相当于物品,n相当于背包容量。凑足总金额为0所需钱币的个数一定是0,那么dp[0] = 0;本题求的是硬币个数,与顺序无关,先遍历物品还是背包都可以。每次都取最小值,所以dp[j]必须初始化为一个最大的数。先遍历物品还是背包都可以,完全背包,从前向后遍历。dp[0] = 0;先遍历背包,再遍历物品,正向遍历。

2023-06-05 15:31:45 49

原创 代码随想录刷题第44天|完全背包、LeetCode518零钱兑换、LeetCode377组合总和IV

C++测试用例有两个数相加超过int的数据,所以需要在if里加上dp[j] < INT_MAX - dp[j - nums[i] ]。先遍历物品,就是先把1加入计算,然后再把5加入计算,得到的方法数量只有{1, 5}这种情况。而不会出现{5, 1}的情况。(能凑成总和就行,不用管怎么凑的)先遍历物品与先遍历背包都可以。本题顺序不同的序列被视作不同的组合,因此先遍历背包,再遍历物品。假设:coins[0] = 1,coins[1] = 5。凑成总金额j的货币组合数为dp[j];与01背包不同的地方在于,

2023-06-04 20:22:26 42

原创 代码随想录刷题第43天|LeetCode1049最后一块石头的重量II,LeetCode494目标和,LeetCode474一和零

已经有一个1(nums[i]) 的话,有 dp[4]种方法 凑成 容量为5的背包。已经有一个2(nums[i]) 的话,有 dp[3]种方法 凑成 容量为5的背包。已经有一个3(nums[i]) 的话,有 dp[2]中方法 凑成 容量为5的背包。已经有一个4(nums[i]) 的话,有 dp[1]中方法 凑成 容量为5的背包。已经有一个5 (nums[i])的话,有 dp[0]中方法 凑成 容量为5的背包。最后两边相差 sum - dp[target] - dp[target]。容量为sum/2的背包。

2023-06-04 15:45:33 34

原创 代码随想录刷题第42天|01背包二维、一维,LeetCode416分割等和子集

如果先遍历背包容量,背包容量是倒叙遍历,前面的都为0,dp[j - weight[i]] + value[i], 相当于每次只放入一个物品,不能累加,因此价值总和不是最大的。当背包容量 j < weight[0]时,dp[0][j] = 0;dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。当背包容量 j >= weight[0]时,dp[0][j] = value[0];当背包容量为0时,dp[0] = 0;

2023-06-02 17:21:57 39

原创 代码随想录刷题第41天|LeetCode343整数拆分、 LeetCode96不同的二叉搜索树

还要与dp[i]比较,因为j从1遍历,每次都会计算出一个dp[i],要得到最大的dp[i]。2、递推公式:dp[i] += dp[j - 1] * dp[i - j];,j-1 为j为头结点左子树节点数量,i-j 为以j为头结点右子树节点数量。4、节点状态:节点数为i的状态是依靠 i之前节点数的状态。dp[i]:分拆数字i,可以得到的最大乘积为dp[i]。拆成三个或三个以上的数:j * dp[i - j]

2023-06-01 00:13:01 35

原创 代码随想录刷题第39天|LeetCode62不同路径、LeetCode63不同路径II

dp[i][j] = dp[i - 1][j] + dp[i][j - 1],因为dp[i][j]只有这两个方向过来。想要求dp[i][j],只能有两个方向来推导出来,即dp[i - 1][j] 和 dp[i][j - 1]。1、dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。3、初始化: dp[i][0] = 1;本题有障碍物,只要让障碍物处的dp[i][j]为0即可。初始化时,遇到障碍物前为1,遇到障碍物时,后面的都为0。

2023-05-30 21:42:34 366

原创 代码随想录刷题第38天|LeetCode509斐波那切数列、LeetCode70爬楼梯、LeetCode746使用最小花费爬楼梯

所以dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);首先是dp[i - 1],上i-1层楼梯,有dp[i - 1]种方法,那么再一步跳一个台阶不就是dp[i]了么。dp[i - 1] 跳到 dp[i] 需要花费 dp[i - 1] + cost[i - 1]。dp[i - 2] 跳到 dp[i] 需要花费 dp[i - 2] + cost[i - 2]。所以dp[i] = dp[i - 1] + dp[i - 2]。

2023-05-30 15:49:34 200

原创 代码随想录刷题第37天|LeetCode738单调递增的数字、LeetCode968监控二叉树

一旦出现strNum[i - 1] > strNum[i]的情况,首先想让strNum[i - 1]--,然后strNum[i]为9。如果空节点状态为0无覆盖,则叶子结点必须为1有摄像头,不符合叶子结点的父节点有摄像头。如果空节点状态为1有摄像头,则叶子结点为2有覆盖,叶子结点的父节点不需要有摄像头。递归结束后头结点可能为0无覆盖,则让头结点状态变为有摄像头。如果空节点状态为2有覆盖,则叶子结点为无覆盖,叶子结点的父节点要有摄像头。左右孩子至少有一个无覆盖,则该节点一定要有摄像头1;

2023-05-29 16:42:02 231

原创 代码随想录刷题第36天|LeetCode435无重叠区间、LeetCode 763划分字母区间、LeetCode56合并区间

在遍历时,如果碰到比第一个字母最远位置还大的,就更新最远位置,当遍历到最远位置,就是第一个区间,长度为right-left+1。本题和射气球类似,射气球是求不重叠的区间,intervals[i][0] > intervals[i-1][1];本题求重叠区间,判断 intervals[i][0] < intervals[i-1][1]。合并区间,定义一个新数组,如果有重叠,在新数组上修改右区间。用哈希表,hash[s[i] - 'a'] = i;如果不重叠,直接在数组上添加新区间。

2023-05-26 20:19:29 30

原创 代码随想录刷题第35天|LeetCode860柠檬水找零、LeetCode406根据身高重建队列、LeetCode452用最少数量的箭引爆气球

但使用vector是非常费时的,如果插入元素大于预先普通数组大小,vector底部会有一个扩容的操作,即申请两倍于原先普通数组的大小,然后把数据拷贝到另一个更大的数组上。按气球起始位置从小到大排列,如果当前气球起始位置 > 前一个气球的终止位置,那么一定不重叠,result++。下一次循环时,如果当前气球起始位置仍然小于前一个气球的终止位置,说明仍然重叠,如果大于,result++;令当前气球的终止位置 = min(当前气球终止位置,前一个气球的终止位置),先按身高从大到小排列,然后按k的位置去插入。

2023-05-25 16:21:24 34

原创 代码随想录刷题第34天|LeetCode1005 K次取反后最大化的数组和、LeetCode134加油站、LeetCode135分发糖果

当剩余油量的累加和cursum小于0,说明前面的起点都不成立,从下一个节点开始算起,cursum置为0。尽可能让绝对值大的负数变为正数,所有负数都变为正数后,尽可能让绝对值小的正数变为负。如果所有油量减去总消耗大于0,一定可以跑完一圈,如果小于0,return -1。再从后向前遍历,如果左边大于右边,在上一步计算得到的数组里,左边孩子多一个糖果。如果跑了一圈,中途没有断油,而且最后油量大于等于0,说明这个起点是ok的。如果都为正数后,k>0,判断k为奇数还是偶数,奇数则让最小的正数变为负。

2023-05-23 23:05:59 54

原创 代码随想录刷题第32天|LeetCode122买卖股票的最佳时机II, LeetCode55跳跃游戏,LeetCode45跳跃游戏II

如果当前覆盖最远距离下标不是集合终点,还需要继续走,cur = next;局部最优:收集每天的正利润,全局最优:求得最大利润。移动下标达到了当前覆盖的最远距离下标时,步数加一。从图中可以发现,收集每天的正利润就可以。看跳跃覆盖范围可不可以覆盖到终点。如果是集合终点,break。

2023-05-22 22:26:49 38

原创 代码随想录刷题第31天|LeetCode455分发饼干、LeetCode376摆动序列、LeetCode53最大子序和

比如[12221],要么删除左边的两个2,要么删除右边的。可以统一规则删除左边的,(prediff <= 0 && curdiff > 0) || (prediff >= 0 && curdiff < 0)。,坡度摆动变化的时候,更新 prediff ,这样 prediff 在 单调区间有平坡的时候 就不会发生变化。若小饼干满足不了小胃口,小饼干要向后遍历去变大,判断能否满足小胃口,因此对s饼干遍历。如果饼干不满足胃口,胃口要向前遍历去变小,再判断饼干是否能满足胃口,因此要对g遍历。

2023-05-22 15:44:01 27

原创 代码随想录刷题第30天|LeetCode332重新安排行程、LeetCode51 N皇后、LeetCode37解数独

col++) 对列的遍历看作横向遍历,如果位置有效,‘.’改为‘Q’,递归backtracking(n, row + 1, chessboard);:检查列,检查左上角,检查右上角,不用检查行,因为每一层递归,只会选for循环(也就是同一行)里的一个元素。如果元素不为'.',continue。k从‘1’到‘9’遍历,判断要放入的元素是否合法,如果合法,放入k。本题递归不用终止条件,等数填满了棋盘自然就终止。:当递归到棋盘的最后一层时,收集结果并返回。本题没太懂,容器也没看太懂,二刷再看看。

2023-05-21 22:39:10 42

原创 代码随想录刷题第29天|LeetCode491递增子序列、LeetCode46全排列、LeetCode47全排列II

如果 (i > 0 && nuns[i] == nums[i-1] && used[i-1] == false),说明当前元素重复,而且是在树层上重复,因为已经发生了回溯,used[i-1] == false;或者unordered_set<int> uset里如果有该元素存在,说明在同一树层,也要continue。如果 used[i] == true,说明当前元素已经取过了,也要continue。,判断要添加的元素nums[i]如果小于path.back(),continue;

2023-05-19 18:18:45 46

原创 代码随想录刷题第28天|LeetCode93复原IP地址,LeetCode78子集,LeetCode80子集II

1、start > end return false 因为在递归时,会backtracking(s, i + 2, PointNum),i + 2可能会超过最后一个元素,因此需要判断是否start > end。,一共有3个“.”,当PointNum == 3时,判断剩余数字是否合法,如果合法,将分割好的s加入数组result。3、将字符串转换为数字,判断是否大于255,如何将字符串转换为数字,num=num*10 + s[i] - '0';与LeetCode40组合总和II类似。

2023-05-18 19:19:22 33

原创 代码随想录刷题第27天|LeetCode39组合总和,LeetCode40组合总和II,LeetCode131分割回文串

双指针法,isPalindrome(s, startIndex, i),如果是回文串则添加,如果不是,continue语句可以让i++,判断再添加一个能不能构成回文串,比如“efe”。,如果 candidates[i] == candidates[i-1],说明元素重复,需要判断是否可以添加。如果used[i-1] == false,说明发生了回溯,此时是从树层开始向后遍历了,continue。例如,[1,1,2] 第一个1和2,第二个1和2,不能重复组合。上使用过,不能添加;上使用过,可以添加。

2023-05-16 12:29:47 51

原创 代码随想录刷题第25天|回溯 LeetCode216组合总和III,LeetCode17电话号码的字母组合

当path.size()==k,且sum == targetSum 时,result.push_back(path)。不再使用startIndex,前两题是在一个集合里,本题在不同的集合。定义了一个映射数组,没有想到。

2023-05-13 20:30:00 31

原创 代码随想录刷题第24天|回溯 LeetCode77组合

还需要 k - path.size 个元素,最多在 n - (k - path.size()) + 1 个位置开始遍历。一层从左到右横向遍历,一层纵向遍历。

2023-05-13 11:35:07 28

原创 代码随想录刷题第23天|LeetCode669修剪二叉搜索树,108将有序数组转换为二叉搜索树 ,538把二叉搜索树转换为累加树

本题右中左遍历,双指针。

2023-05-12 22:19:17 31

原创 代码随想录刷题第22天|LeetCode235二叉搜索树的最近公共祖先、LeetCode701二叉搜索树中的插入操作 、LeetCode450删除二叉搜索树中的节点

注意最后的 return NULL;

2023-05-12 16:23:20 25

原创 代码随想录刷题第21天|LeetCode530二叉搜索树的最小绝对差、LeetCode501二叉搜索树中的众数、LeetCode236二叉树的最近公共祖先

双指针,if (pre->val == root->val) count++;把树都遍历了,用map统计频率,把频率排序,最后取前面高频的元素的集合。理解了挺久的,二刷再好好做一遍。

2023-05-09 22:51:08 29

原创 代码随想录刷题第20天|LeetCode654最大二叉树、617合并二叉树、700二叉搜索树中的搜索、98验证二叉搜索树

方法二:long long maxVal = LONG_MIN;每次用maxValue去比较。最大值所在的下标左区间 构造左子树,最大值所在的下标右区间 构造右子树。终止条件:当搜索的节点为空或等于需要的值时,return root。先要找到数组中最大的值和对应的下标, 最大的值构造根节点。当前搜索的节点值大于目标值,向左搜寻,否则向右搜寻。方法一:递归中序遍历将二叉搜索树转变成一个数组。方法三:记录前一个节点来比较,相当于双指针。

2023-05-09 16:18:33 33

原创 代码随想录刷题第18天|LeetCode513找树左下角的值、LeetCode112路径总和、113路径总和ii、LeetCode106从中序与后序遍历构造二叉树、105从前序与中序遍历构造二叉树

path.push_back(root->val), 递归,当遍历到叶子结点且count=0时,result.push_back(path),如何统计这一条路径的和,不要去累加然后判断是否等于目标和,可以用递减,让计数器count初始为目标和,然后每次减去遍历路径节点上的数值。第四步:切割中序数组,切成中序左数组和中序右数组 (顺序别搞反了,一定是先切中序数组)如果最后count == 0,同时到了叶子节点的话,说明找到了目标和。第五步:切割后序数组,切成后序左数组和后序右数组。

2023-05-07 11:13:48 33

原创 代码随想录刷题第17天|二叉树 LeetCode110平衡二叉树、LeetCode257二叉树的所有路径、LeetCode404左子叶之和

分别求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1,表示已经不是二叉平衡树了。当左右孩子不为空时,继续递归,当递归到左右孩子为空时,将path中的元素添加至result中,然后开始回溯。节点A的左孩子不为空,且左孩子的左右孩子都为空(说明是叶子节点),那么A节点的左孩子为左叶子节点。path数组里存放的是int类型,将其转换为string类型,并且要添加“->”。要传入根节点,记录每一条路径的path,和存放结果集的result。来判断其左孩子是不是左叶子。

2023-05-05 21:53:33 82

原创 代码随想录刷题第16天|二叉树 LeetCode104二叉树的最大深度、LeetCode559n叉树的最大深度、LeetCode111二叉树的最小深度、LeetCode222完全二叉树的节点个数

但需要注意的是,以下情况返回的是1,但叶子结点是左右孩子都为空的节点,应该是4这个节点,返回值应该是3。当从队列头部弹出元素时,判断如果该元素的左右孩子都为空,说明该节点是叶子结点,立马返回depth,depth不再++;与求最大深度类似,这里返回 1 + min( leftHeight, rightHeight )在完全二叉树中,如果递归向左遍历的深度等于递归向右遍历的深度,那说明就是满二叉树。根节点的高度就是二叉树的最大深度。

2023-05-04 23:26:44 137

原创 代码随想录刷题第15天|二叉树 LeetCode102层序遍历、LeetCode226翻转二叉树、LeetCode101对称二叉树

将根节点放入队列,当队列不为空时,弹出队头元素,同时处理该元素的左右孩子,左右孩子不为空则将左右孩子放入队中,记录队列中的元素个数,有几个元素弹出几次。递归的条件写不出来,if (result.size() == depth) result.push_back(vector<int>())用栈,首先加入根节点,栈不为空时,弹出栈顶元素,同时交换左右孩子,并将不为空的左右孩子入栈。116.填充每个节点的下一个右侧节点指针;117.填充每个节点的下一个右侧节点指针II。102.二叉树的层序遍历;

2023-05-03 23:10:11 225

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除