自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 随想录Day60--单调栈:84.柱状图中最大的矩形

个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1。求在该柱状图中,能够勾勒出来的矩形的最大面积。最大的矩形为图中红色区域,面积为 10。

2023-04-19 11:54:15 88 2

原创 随想录Day59--单调栈: 503.下一个更大元素II , 42. 接雨水

的思路是一样的,不过是多了一个首位相连的环状条件,这时候可以想到,把数组再复制遍历,用两个数组拼接成一个数组后再寻找下一个最大的元素,最后的结果只返回单个数组的大小就可以了。取巧简化的方法是,当你遍历到最后一个数组元素后,怎么再重头遍历,那就是用取余%来做,把数组遍历两遍,i的取值取余数组的长度,这样越过最后一个数组后就可以从头再来了。,对整道题有着更加深入的理解,其实就是找到右边的第一个更大值,然后单调栈存放着是左边的第一个更大值,两个更大值之间就会产生凹槽,计算凹槽的面积就是雨水面积。

2023-04-19 11:16:38 155

原创 随想录Day58--单调栈: 739. 每日温度 , 496.下一个更大元素 I

对于输入 75,它经过 1 天后发现温度是 71,没有超过它,继续等,一直 等了四天,在第七天才等到温度的升高,温度升高到 76 ,所以对应的结果是 4。对于输入 71,它经过 1 天后发现温度是 69,没有超过它,继续等,一直 等了两天,在第六天才等到温度的升高,温度升高到 72 ,所以对应的结果是 2。对于输入 73,它需要 经过一天 才能等到温度的升高,也就是在第二天的时候,温度升高到 74 ,所以对应的结果是 1。遍历的时候,每个数都去向后数,直到找到比它大的数,数的次数就是对应输出的值。

2023-04-18 16:55:15 329

原创 随想录Day57--动态规划: 647. 回文子串 , 516.最长回文子序列

回文串和最长回文子串,关键在于dp数组的定义,以及中间的关系式和递推公式怎么表达。代码其实很简单,但最重要的是思路!!!回文子串dp是布尔型,遍历所有情况找到所有的true,最长回文子序列则和最长相同子序列有点像,是可以进行删除的。给你一个字符串s,请你统计并返回这个字符串中的数目。是正着读和倒过来读一样的字符串。是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。s = "abc"3三个回文子串: "a", "b", "c"

2023-04-18 11:10:10 109

原创 随想录Day56--动态规划:583. 两个字符串的删除操作,72. 编辑距离

给定两个单词word1和word2,返回使得word1和word2所需的。可以删除任意一个字符串中的一个字符。2第一步将 "sea" 变为 "ea" ,第二步将 "eat "变为 "ea"4word2。

2023-04-17 11:49:04 118

原创 随想录Day55--动态规划: 392.判断子序列 , 115.不同的子序列

392.判断子序列。

2023-04-16 23:40:25 193

原创 随想录Day53--动态规划: 1143.最长公共子序列 ,1035.不相交的线 , 53. 最大子序和

1143.最长公共子序列,这题要画一个二维数组,用两层for循环来遍历每个字符,从而比较是否相等。用dp[i][j]来表示当遍历到text2的第i个字符和text1的第j个字符时,最长的公共子序列为多少。比如说两个字符串(“abcde”和“ace”),以abcde为列,ace为行,就是3行5列的数组。这时到了dp[1][1]时,表示的就是(“ab”和“ac”)的最长公共子序列。

2023-04-13 15:12:10 406

原创 随想录Day52--动态规划: 300.最长递增子序列 , 674. 最长连续递增序列 ,718. 最长重复子数组

给你一个整数数组nums,找到其中最长严格递增子序列的长度。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组的子序列。4最长递增子序列是 [2,3,7,101],因此长度为 4。41。

2023-04-10 17:37:26 282

原创 随想录Day51--动态规划: 309.最佳买卖股票时机含冷冻期 ,714.买卖股票的最佳时机含手续费

定义数组dp[i][j],表示第i天状态为j,所剩的最多现金为dp[i][j]。,保持卖出的状态由两种状态转化:(1)昨天之前已经卖出,今天保持昨天状态(2)昨天刚卖出,昨天是冷冻期。冷冻期的钱也就是昨天卖出的钱。

2023-04-06 21:54:37 215

原创 随想录Day50--动态规划: 123.买卖股票的最佳时机III, 188.买卖股票的最佳时机IV

K次操作股票,需要用二维数组,第二维来表示操作的状态,第一维表示第i个物品,也就是股票的价格。

2023-04-05 17:04:27 275

原创 随想录Day49--动态规划:121. 买卖股票的最佳时机 , 122.买卖股票的最佳时机II

dp[i][1] = Math.max(dp[i - 1][1],price[i] + dp[i - 1][0])表示的是,今天是不持有股票,如果今天卖出股票的价格减去昨天持有股票的价格比昨天不持有股票的价格来的低,那么继续保持之前卖出股票的收益,如果今天卖出的价格比之前的高,那么就今天卖。这时候需要用二维数组进行定义,dp[i][0]表示第i天时,持有股票所花的最小钱,dp[i][1]表示第i天时,没有持有股票所得到的收益,没有持有股票说明是今天卖出,也有可能是之前卖出。同时,你不能在买入前卖出股票。

2023-04-05 14:58:22 279

原创 随想录Day48--动态规划:198. 打家劫舍,213. 打家劫舍 II,337. 打家劫舍 III

如果偷第i房间,那么dp[i] = dp[i - 2] + nums[i] ,即:第i-1房一定是不考虑的,找出 下标i-2(包括i-2)以内的房屋,最多可以偷窃的金额为dp[i-2] 加上第i房间偷到的钱。从dp[i]的定义上来讲,dp[0] 一定是 nums[0],dp[1]就是nums[0]和nums[1]的最大值即:dp[1] = max(你是一个专业的小偷,计划偷窃沿街的房屋。然后dp[i]取最大值,即dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);

2023-04-04 23:37:11 439

原创 随想录Day46--动态规划: 139.单词拆分,(多重背包了解)

单词拆分这道题,我的思路是字符串看做背包容量,单词作为物品,字符串由单词组成,并且单词可以重复使用,因此可以看做是一道完全背包。这时候需要考虑dp[]的含义了。题目问的是字符串能否由单词构成,所以把dp[i]定义成i容量的背包(i长度的字符串)能否由可单词组成,是个boolean类型。dp[0] = true,初始化表示,字符串长度为0时,那么就可以由一个单词数组构成(不使用任何单词)。dp[i] = true的条件是,(1)字符串切割[0,i)(前闭后开),判断这段字符串能否由单词组成。

2023-04-04 11:23:27 235

原创 随想录Day45--动态规划:70. 爬楼梯 (进阶), 322. 零钱兑换, 279.完全平方数

70爬楼梯这道题之前已经做过,是动态规划思想的入门,想要爬上第n层阶梯,看爬上n-1层的方法和n-2层的方法共有多少种,两个相加就是爬上n层阶梯的方法。初始化dp[0] = 0,因为0元的兑换不需要硬币,所以是0.因为零钱是可以重复使用的,所以是个完全背包问题,但是零钱是个组合问题,比如说6块钱可以用5元和1元零钱兑换,也可以用1元和5元兑换(和5元,1元的顺序不同),但是是同一种方法,所以这是组合问题。这里完全平方数可以重复使用,并且是个组合问题,和完全平方数的顺序无关,所以是个多重背包的组合问题。

2023-04-03 16:12:04 356

原创 随想录Day44--动态规划: 518. 零钱兑换 II ,377. 组合总和 Ⅳ (遍历顺序决定是排列还是组合)

。求物品可以重复使用时,最好是用一维数组,会比较方便。二维数组不想思考了,二维还是用在01背吧吧。记忆:因为先物品再背包时,物品只能一个一个选,所以是组合。先背包在物品时,每次背包都可以重新选物品,所以是排列。给你一个整数数组coins表示不同面额的硬币,另给一个整数amount表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回0。假设每一种面额的硬币有无限个。题目数据保证结果符合 32 位带符号整数。4有四种方式可以凑成总金额:5=5。

2023-03-31 18:43:45 83

原创 随想录Day43--动态规划: 1049. 最后一块石头的重量 II , 494. 目标和 , 474.一和零

这里可以求集合的一个平均值,如果正好等于平均值,说明可以抵消,这时候重量为0,如果不行,就把这个平均值作为背包的容量,往这里面放东西,当放的重量最接近这个背包重量时,就是最优解。dp[i][j]表示背包的重量,也就是价值,i表示第i个石头,j表示背包的容量。一和零,dp[i][j] 表示的是放入的最大子集的个数,i表示0的容量,j表示1的容量。最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001","1","0"} ,因此答案是 4。,然后将它们一起粉碎。的最大子集的长度,该子集中。

2023-03-31 17:30:30 172

原创 随想录Day42--动态规划: 416. 分割等和子集(终于吃下01背包了)

如果背包容量足够,那么他就面临两种选择,偷和不偷,如果不偷,产生的价值不变,容量不变,如果偷,那么它的总价值就加上这个物品的价值,同时背包容量就相应减少。最终的f(4,8)就是我们决策的结果,其余的表格数字只是一个铺垫,都是每个决策产生的最大值,但是最后的f(4,8)才是我们有4个物品,同时背包容量为8的结果。回到题目:分割等和子集,这个可以看成背包容量为整个集合的和的一半,只要背包正好装满,那么这个背包的价值就是整个集合的一半,背包的和与剩下的子集的和相等,可以返回true。,这是我认为讲得最为通透的。

2023-03-29 10:28:14 266

原创 随想录Day41--动态规划: 343. 整数拆分 ,96.不同的二叉搜索树

343整数拆分,有两种解法,一种是数学的方法,利用当f>4时,2*(f - 2)=2f - 4 > f的性质,将所有的因子都拆成3,最后的余数再乘进去。另外一种是动态规划,把前面的数拆了后,得到最大值,后面的数再进行拆分过程中,把拆掉的一个数j和最大值dp[i - j]相乘,得到一个新的最大值,用一个for循环遍历,找到j等于多少时才是最大就可以。

2023-03-28 11:54:22 304

原创 随想录Day39--动态规划: 62.不同路径 , 63. 不同路径 II

今天的路劲问题,思想和昨天的爬楼梯一样,主要还是找到你这个位置是怎么来的,到达dp[i][j]的方法由到达dp[i - 1][j]的方法再加上到达dp[i][j - 1]的方法和。63. 不同路径 II 加了一个障碍物进去,加障碍物进去后,其实就是多了一个条件,就是到达这个点的方法为0,所以在原来的基础上加上如果遇到障碍物,那么dp[i][j]就等于0,加上这个条件就可以了。1. 向右 -> 向右 -> 向下 -> 向下。2. 向下 -> 向下 -> 向右 -> 向右。1. 向右 -> 向下 -> 向下。

2023-03-27 23:51:41 1056

原创 随想录Day38--动态规划:509. 斐波那契数 , 70. 爬楼梯, 746. 使用最小花费爬楼梯

今天做的3题动态入门题,70和746的思想很重要,最主要的是理解里面的计算方法以及数组中的i是什么意思,在这两题楼梯中,i表示的是第几阶楼梯。最小费用上楼梯可以这么考虑,你要上到第i个台阶,由于只能上1个或者两个台阶,那么你只要考虑从i-1或者i-2台阶到第i个楼梯最小花费的方式,有点类似于递归,但是只需要用一个for循环把所有阶梯的费用计算完就可以。个台阶向上爬需要支付的费用。- 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。

2023-03-27 17:15:06 130

原创 随想录Day37--贪心算法 : 738.单调递增的数字 , 968.监控二叉树 (可以跳过),总结

本题只要想清楚个例,例如98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]减一,strNum[i]赋值9,这样这个整数就是89。例如:98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]--,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数。,不仅贪心的思路不好想,而且需要对二叉树的操作特别娴熟,这就是典型的交叉类难题了。

2023-03-23 17:36:28 60

原创 随想录Day36--贪心算法 :435. 无重叠区间 ,763.划分字母区间 , 56. 合并区间

按照左边界从小到大排序之后,如果 intervals[i][0]

2023-03-23 15:51:35 29

原创 随想录Day35--贪心算法 :860.柠檬水找零,406.根据身高重建队列 , 452. 用最少数量的箭引爆气球

编号为 4 的人身高为 4 ,有 4 个身高更高或者相同的人排在他前面,即编号为 0、1、2、3 的人。因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新构造后的队列。编号为 2 的人身高为 5 ,有 2 个身高更高或者相同的人排在他前面,即编号为 0 和 1 的人。编号为 3 的人身高为 6 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。编号为 5 的人身高为 7 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。

2023-03-21 20:16:44 39

原创 随想录Day34--贪心算法 :1005.K次取反后最大化的数组和 ,134. 加油站 ,135. 分发糖果

135. 分发糖果 这题,首先要理解题目的意思,只要你比你旁边的人分数高,那么你就一定比那个第二高的人的糖果还要多,因此你需要遍历两遍分数,从左到右遍历时,如果你比左边大,那么你就要比左边人糖果加1,这样就保证了右边一定满足较大的人糖果较多原则;接着再从右往左遍历,只要左边比右边大,那么分得的糖果就要比右边多,两者叠加后,就是你在中间最大的话,你就一定比两边的糖果多。这道题的思路一样,关键在于求前面的加油站是否有增益,如果有增益,则继续往下跑,如果没有增益,就从下一个加油站作为起点开始。

2023-03-20 14:48:44 65

原创 随想录Day30--回溯算法 :332.重新安排行程(可跳过) ,51. N皇后(可跳过) ,37. 解数独(可跳过)

N皇后和解数独的思路比较像,看着卡哥的视频过了一遍思路,说白了就是暴力遍历,也就是回溯,然后判断是否满足条件。都知道n皇后问题是回溯算法解决的经典问题,但是用回溯解决多了组合、切割、子集、排列问题之后,遇到这种二维矩阵还会有点不知所措。从图中,可以看出,二维矩阵中矩阵的高就是这棵树的高度,矩阵的宽就是树形结构中每一个节点的宽度。确定完约束条件,来看看究竟要怎么去搜索皇后们的位置,其实搜索皇后的位置,可以抽象为一棵树。,所以回溯法也经常和二叉树遍历,深度优先搜索混在一起,因为这两种方式都是用了递归。

2023-03-18 13:19:49 32

原创 随想录Day32--贪心算法: 122.买卖股票的最佳时机II , 55. 跳跃游戏 ,45.跳跃游戏II

相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。所以真正解题的时候,要从覆盖范围出发,不管怎么跳,覆盖范围内一定是可以跳到的,以最小的步数增加覆盖范围,覆盖范围一旦覆盖了终点,得到的就是最小步数!图中覆盖范围的意义在于,只要红色的区域,最多两步一定可以到!

2023-03-18 11:55:42 47

原创 随想录Day31--贪心算法:455.分发饼干 ,376. 摆动序列 ,53. 最大子序和

376摆动序列的一个核心在于一正一负,也就是两个之间的差是小于0才可以,特殊情况就是当前面几个数都相等时,差就是0,这时候怎么处理,所以思路就是先把前面相等的去除,后面相等就没事,因为判断条件是小于0,相等直接等于0,也不能满足条件。相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。,这个孩子会得到满足。整个序列均为摆动序列,各元素之间的差值为 (6, -3, 5, -7, 3)。

2023-03-17 18:51:25 53

原创 随想录Day29--491.递增子序列 ,46.全排列 ,47.全排列 II

491.递增子序列中的元素去重,在同层元素中,可以使用哈希表判断是否已经选择过相同的元素,如果已经选择过了,那就continue,如果还没,就继续下一层递归。47.全排列 II元素是有重复的,一开始的思路是先把满足条件的元素收集起来,一起放入哈希表里面,然后用哈希去重。的解析中有个单层剪枝和单枝剪枝的思路,其核心是先排序,然后给重复元素一种固定的顺序出场,这样就不会出现重读的集合了。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。今天的题目中,去重是关键,

2023-03-17 15:35:07 28

原创 随想录Day28--93.复原IP地址, 78.子集, 90.子集II

另一种思路是不需要路径集,直接在原来的字符串中修改,判断条件为加的点数为3并且最后点数后面的数值要满足ip的0-255条件,否则不放入结果集。我刚开始用的是思路1,但是因为剪枝的问题还有头脑不清晰,思路很紊乱,解不出来,最后看了答案,理解了思路2的方法,虽然剪枝效果不是很好,但是思路比较直接,更容易想到。复原IP地址这道题是有点难,之前做的题目,需要两个结果集,一个收集路径,一个用来收集结果。子集和子集2也是组合问题,区别在于子集问题不需要多一个if的判断条件,所有的路径都可以加入结果集中。

2023-03-14 16:27:20 23

原创 随想录Day27-- 39. 组合总和, 40.组合总和II , 131.分割回文串

我明白了,虽然每次递归时,传入的index都会加1,但是list的大小也在加一,所以for循环的退出条件9 - k + list.size()+ 1 的这个条件,就会单调递增,最后两者爆栈,而不剪枝的话,for循环结束条件固定死为i

2023-03-13 23:32:34 51

原创 随想录Day25-- 216.组合总和III , 17.电话号码的字母组合

电话号码的字母组合其实也是回溯的经典,其难点在于回溯过程中又加了一层循环,也就是每个数字对应3或者4个字母,找到对应的数字后,还要转化为三个字母再进行组合。在这个过程中还设计了数字字母的转化,字符串的转化,用哈希表存储2-9对应的字母表,为了使加减更加容易,也使用了StringBuilder来操作字符串,小知识点比较多,所以看起来比较难,但是内部思路一样的,只是在for循环的回溯中再嵌套了一层for循环找到对应的字母。这道题的变体,一样是回溯的思想,回溯模板一样是if,然后for。没有其他符合的组合了。

2023-03-12 14:01:19 56

原创 随想录Day24--回溯算法第一战77. 组合

对应的关键在于回溯撤销处理结果。这道题的坑在于你要去感受值的添加和删除,以及怎么去变化得。第三个参数的i+1,我一开始用的index+1,index是上层传过来的数,是个固定值,导致每次循环都要从2开始。这点细节要注意,应该是从i开始,保证了每次都是从后面那个数开始,也就是组合的形式不重复。回溯的关键在参数这里,如果是从1开始,那就相当于排列了。给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。回溯是比递归更让人头疼的事件,因为在递归的过程中还需要值的处理。

2023-03-10 11:50:57 54

原创 随想录Day23--669. 修剪二叉搜索树,108.将有序数组转换为二叉搜索树 ,538.把二叉搜索树转换为累加树

二叉树和数组之间的转换是最有意思的一道题,和知道两个遍历顺序求解树的思路一样,要确定好数组的取值范围就可以。修建二叉搜索树和转化为累加树,考验的就是对递归的理解,怎么在递归的过程中,传递信息,达到某种需求。今天的三道题比较考验递归的理解,早上脑袋瓜有点迷糊,不能一层一层去分析,找到递归的思路,然后看了解答后又觉得都不难,其实还是基础没有掌握好。树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点。所以结果应当返回修剪好的二叉搜索树的新的根节点。

2023-03-09 11:25:44 37

原创 随想录Day22--235. 二叉搜索树的最近公共祖先 ,701.二叉搜索树中的插入操作 ,450.删除二叉搜索树中的节点

首先查,找公共祖先,之前做过普通二叉树的公共祖先,递归返回值为boolean类型,目的就是判断其子树是否还有其中的某一个值,把这个信息上传,然后再找到一个节点,能够使得左右子树或者说本身和其子树含有这两个值,就找到了公共祖先。第五种情况:左右孩子节点都不为空,则将删除节点的左子树头结点(左孩子)放到删除节点的右子树的最左面节点的左孩子上,返回删除节点右孩子为新的根节点。将删除节点(元素7)的左孩子放到删除节点(元素7)的右子树的最左面节点(元素8)的左孩子上,就是把5为根节点的子树移到了8的左孩子的位置。

2023-03-08 11:32:08 42

原创 随想录Day21--530. 二叉搜索树的最小绝对差,501. 二叉搜索树中的众数,236. 二叉树的最近公共祖先

今天的这三道题有个共同的特点,就是不能只考虑根节点或者根节点对应的孩子节点,他需要有一个传递的过程,把父节点也传进递归里面进行比较,因此这种有间隔的节点比较,最好在外面定义一个全局变量,用这个变量来传递父节点的值。二叉树搜索最小绝对差,也就是相邻的节点那个差值最大,从下往上遍历,把差值的频率记下来,遇到频率更大的,清空原来存储的值,否则,继续累加或者计算新的差值的频率,反馈最大的差值频率用全局变量控制。给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有。

2023-03-07 16:18:03 31

原创 随想录Day20--654. 最大二叉树,617. 合并二叉树,700. 二叉搜索树中的搜索,98. 验证二叉搜索树

合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;- [3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5]。- [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1]。- [2,1] 中的最大值是 2 ,左边部分是 [] ,右边部分是 [1]。- [0,5] 中的最大值是 5 ,左边部分是 [0] ,右边部分是 []。- 空数组,无子节点。根节点的值是 5 ,但是右子节点的值是 4。

2023-03-06 21:40:03 32

原创 随想录Day18--513. 找树左下角的值,112. 路径总和,113. 路径总和 II,106. 从中序与后序遍历序列构造二叉树,105. 从前序与中序遍历序列构造二叉树

路径总和实际上思路是一样的,递归遍历节点,找到叶子节点后,计算路径上的和是否等于目标值,如果不相等不进行操作,相等的话,把路径上的节点用list收集起来。构造二叉树用递归思路也是比较清晰,关键在于中序和其他顺序的配合,找到中间根节点后,扩展它的子节点。给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗。由于树是空的,所以不存在根节点到叶子节点的路径。等于目标和的根节点到叶节点路径如上图所示。

2023-03-06 14:31:54 43

原创 随想录Day17-- 110.平衡二叉树 , 257. 二叉树的所有路径 , 404.左叶子之和

今天的这三道题,在遍历的基础上进行改变。平衡二叉树,遍历完后求高度,比较不同子树之间的高度差是否大于.二叉树的所有路径,也是深度的遍历,一直遍历下去,只是在遍历的过程中,把遇到的值放在一个字符串中收集起来。左叶子之和,也是递归遍历,找到左叶子的条件,把所有左叶子的值加起来。在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24。给定二叉树的根节点 root ,返回所有左叶子之和。给定一个二叉树,判断它是否是高度平衡的二叉树。,返回所有从根节点到叶子节点的路径。是指没有子节点的节点。

2023-03-03 13:47:04 42

原创 随想录Day16-- 104.二叉树的最大深度, 111.二叉树的最小深度 , 222.完全二叉树的节点个数

这里的一个技巧就是把左右子树全部看做是孩子节点,然后画图,一层层分析,分析到最底层后看看是不是能出来,出来的逻辑如果还是跟孩子节点是一样的,那么说明递归的思路没问题。最大深度和最小深度在递归过程中,主要比较每颗子树的深度是多少,所以采用的遍历方式是后序遍历,把孩子节点的深度告诉父节点,父节点同时也是父父节点的孩子节点,所以递归逻辑就有了。完全二叉树的节点个数实际上是遍历,我认为用普通的遍历方法就行,因为完全二叉树是一种特殊的二叉树,如果用它的特性来写代码,可能需要记住的东西更多。

2023-03-02 11:16:43 170

原创 随想录Day15-- 层序遍历, 226.翻转二叉树 , 101. 对称二叉树

队列用来存放下一层的元素,size来表示下一层元素的个数,当size=0时表示这一层的元素已经全部弹出(如果不设置一个辅助变量size,队列中会有当层元素和下层元素混合的情况,无法判断是否已经把当层元素遍历完)给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

2023-03-01 17:54:15 52

空空如也

空空如也

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

TA关注的人

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