自定义博客皮肤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)
  • 收藏
  • 关注

原创 【代码随想录刷题总结篇】

一刷的过程中,每日的刷题训练真的艰难,一道题单靠我自己是完全不能够想出解题思路的,那可真的是一道代码刷一天。还好在卡哥训练营的帮助下,我才能有毅力完整的刷完这第一遍。虽然刷题是一件痛苦的事情,但这两个月里我收获了不少,看着自己刷过的题还是有很高的成就感的。代码常刷常新,有机会我会继续将进代码随想录的二刷,以此巩固自己这两个月来的收获并获得新的认知。而且卡哥优质的题解以及视频讲解给我带来了很大的帮助,期待卡哥后续也能越做越好。

2023-07-25 09:05:07 405

原创 【代码随想录刷题记录】 84.柱状图中最大的矩形

题目链接:https://leetcode.cn/problems/largest-rectangle-in-histogram/与接雨水类似,只不过本题需要在头尾加入0,使得从以所有柱子为中间的最大面积都可以被算出来。最后在遍历的过程中取最大值即可。给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1。求在该柱状图中,能够勾勒出来的矩形的最大面积。

2023-07-22 17:40:37 123

原创 【代码随想录刷题记录】503.下一个更大元素II 、 42. 接雨水

给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素。数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。题目链接:https://leetcode.cn/problems/next-greater-element-ii/给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

2023-07-21 20:09:28 125

原创 【代码随想录刷题记录】 739. 每日温度 、 496.下一个更大元素 I

对于每个 0 <= i < nums1.length ,找出满足 nums1[i] == nums2[j] 的下标 j ,并且在 nums2 确定 nums2[j] 的 下一个更大元素。使用栈用于记录当前遍历过的数组元素的下标,遇到当前元素小于等于栈顶元素时直接将当前元素压入栈中即可,遇到当前元素大于栈顶元素时,将栈顶元素取出并完成对应操作一直到栈顶元素小于当前元素或者栈为空再将当前元素压入栈。题目链接:https://leetcode.cn/problems/daily-temperatures/

2023-07-20 16:44:12 123

原创 【代码随想录刷题记录】 647. 回文子串 、 516.最长回文子序列

使用dp[i][j]表示字符串中i-j的最长回文串序列,将dp[i][i]均初始化为1,再根据s[i],s[j]的情况进行遍历递推。需要注意遍历是从上到下,从左到右。使用dp[i]表示字符串中0-i的字符串中回文的个数,通过内层循环判断添加第i个字符后增加的回文串个数再加上dp[i-1]即可得到答案。题目链接:https://leetcode.cn/problems/longest-palindromic-subsequence/给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。

2023-07-19 20:54:29 1091

原创 【代码随想录刷题记录】 583. 两个字符串的删除操作 、 72. 编辑距离

判断word1[i-1]与word2[j-1]是否相等,相等则根据递推公式得不需要再进行额外操作,不等则需要根据不同情况进行增删改得操作。题目链接:https://leetcode.cn/problems/delete-operation-for-two-strings/计算两个单词之间的最长公共子序列,最后将两个字符的长度分别减去最长公共子序列再相加就是最后答案。题目链接:https://leetcode.cn/problems/edit-distance/每步 可以删除任意一个字符串中的一个字符。

2023-07-18 21:02:44 100

原创 【代码随想录刷题记录】 392.判断子序列 、 115.不同的子序列

使用dp数组记录当前情况下s包含的t的个数,遇到s[i-1]==t[i-1]时有两种情况一个是使用s[i-1],一个是不使用s[i-1]。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。题目链接:https://leetcode.cn/problems/distinct-subsequences/题目链接:https://leetcode.cn/problems/is-subsequence/使用dp数组计算两个字符串最长公共子序列的长度,如果该长度与s的长度相等就说明s是t的子序列。

2023-07-17 21:48:28 201

原创 【代码随想录刷题记录】1143.最长公共子序列 、 1035.不相交的线 、53. 最大子序和

本题与昨天的最长重复子数组类似,为了初始化的方便用dp[i][j]表示两个字符串分别以i-1结尾和j-1结尾的字符串相等个数。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。该题与上题完全类似,需要找不相交的线就等于找两个数组中的相同的子序列,而在两个数组中子序列的相对顺序要相同,也就是寻找两个数组的最长公共子序列。用dp[i]记录以i结尾的连续数组的最大和,其取值为本身和以i-1结尾的最大和中的最大值。

2023-07-16 12:26:32 102

原创 【代码随想录刷题记录】 300.最长递增子序列 、 674. 最长连续递增序列 、718. 最长重复子数组

dp数组表示nums1以i结尾的以及nums2以j结尾的数组的最长重复子序列,但需要注意初始化过程以及resul的遍历情况,避免漏掉部分情况。题目链接:https://leetcode.cn/problems/maximum-length-of-repeated-subarray/与上一题的代码类似,但需要注意的是该题求得是连续得子序列,所以不需要进行内层的循环,直接比较nums[i-1]即可。给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度。

2023-07-15 18:22:53 138

原创 【代码随想录刷题记录】 309.最佳买卖股票时机含冷冻期 、 714.买卖股票的最佳时机含手续费

题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。分成4种状态,根据递推公式计算每天的不同状态下的现金数,最后返回最后一天所有状态中现金数的最大值。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。在买卖股票最佳时机的基础上,在每笔交易结束的时候扣除手续费,最后返回结果即可。

2023-07-13 20:54:01 51

原创 【代码随想录刷题记录】123.买卖股票的最佳时机III 、 188.买卖股票的最佳时机IV

题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iii/题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iv/给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格,和一个整型 k。你最多可以完成 k 笔交易。给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。

2023-07-12 21:54:23 74

原创 【代码随想录刷题记录】121. 买卖股票的最佳时机 、 122.买卖股票的最佳时机II

与上题类似,唯一的区别就在于第i天持有股票,所拥有现金的递推公式的区别。本题可以购买多次股票,故当我们在第i天买入股票时,就表明第i-1天不持有股票,此时要把之前获得的现金减去买入的就得到目前拥有的现金数量。返回 你能获得的 最大 利润。题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/

2023-07-11 21:26:35 171

原创 【代码随想录刷题记录】198.打家劫舍 、 213.打家劫舍II 、 337.打家劫舍III

同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。使用动态规划和后序遍历的结合,记录下偷当前节点的金额最大值和不偷当前节点的金额最大值,并返回直到根节点返回两者中的最大值即可。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。小偷又发现了一个新的可行窃的地区。

2023-07-10 16:37:55 61

原创 【代码随想录刷题记录】139.单词拆分

该题使用背包算法,首先将dp数组初始化为false,dp[0] = true。其次,通过j和i截取字符子串并判断其是否在字典中。该题还可以使用回溯算法进行解答。给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s。题目链接:https://leetcode.cn/problems/word-break/

2023-07-09 09:19:37 33

原创 【代码随想录刷题记录】 70. 爬楼梯 (进阶) 、322. 零钱兑换 、 279.完全平方数

本题是为了寻找可以凑成目标数的最小硬币数,故先遍历背包以及先遍历物品都可以。需要注意的时要根据不同的题目条件寻找合适的遍历顺序。之前使用过简单的动态规划做过该题,但仔细考虑题目的条件可知该题还属于一道完全背包的题目,还可以使用完全背包算法进行解题。题目链接:https://leetcode.cn/problems/climbing-stairs/使用完全背包可以很好的解决这道题目,需要注意的是求最小数量时,需要使dp数组初始化为最大值。给你一个整数 n ,返回 和为 n 的完全平方数的最少数量。

2023-07-08 17:11:26 29

原创 【代码随想录刷题记录】 518. 零钱兑换 II 、 377. 组合总和 Ⅳ

给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target。请你从 nums 中找出并返回总和为 target 的元素组合的个数。题目链接:https://leetcode.cn/problems/combination-sum-iv/题目链接:https://leetcode.cn/problems/coin-change-ii/给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。本题是完全背包的应用型问题,在完全背包的解题基础上求解组合数问题。

2023-07-07 16:52:08 31

原创 【代码随想录刷题记录】 1049. 最后一块石头的重量 II 、 494. 目标和 、 474.一和零

1、题目有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量。如果没有石头剩下,就返回 0。

2023-07-05 12:31:31 24

原创 【代码随想录刷题记录】 416. 分割等和子集

首先需要求得整个数组的总和,如果总和为奇数可以直接判断不存在两个子集使得其和相同。得到target = sum/2, 转化为0-1背包解法,其重量和价值均等于nums[i]。当dp[target] == target 时表明背包装满了,也就是说存在子集使得其和等于总和的一半,当dp[target] < target时表明背包没有装满,也就是说找不到子集使得其和为。题目链接:https://leetcode.cn/problems/partition-equal-subset-sum/

2023-07-04 15:51:02 25

原创 【代码随想录刷题记录】 343. 整数拆分 、 96.不同的二叉搜索树

需要使用内层循环遍历 i 的不同拆分情况记录当中的乘积最大值,内层循环固定 j ,对另一个数进行拆分或者不拆分处理。还可以对 j 的循环进行优化,乘积最大值只会出现在拆分出尽可能相等的数的情况下,当 j > i/2 不会出现乘积最大的情况,就没必要进行后续的遍历了。当 j 为根节点,其种类数为 dp[以j为根节点的左孩子数量] * dp[以j为根节点的右孩子数量]。返回满足题意的二叉搜索树的种数。给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。

2023-07-03 12:14:55 26

原创 【代码随想录刷题记录】 62.不同路径 、 63. 不同路径 II

由题可以得到,到达dp[i][j]可以从dp[i-1][j]以及dp[i][j-1]处走一步到达,因此dp[i][j] = dp[i-1][j]+dp[i][j-1]。在m*n的棋盘上,到达上边界以及左边界的任意一点都是1中方法,故需要将他们初始化为1。本题只需要在上题的基础上进行改变即可,在初始化问题上需要注意的是只要遇见了障碍物往后的就不需要进行更改,仍为0.在遍历的过程中,如果当前是障碍物也不需要进行操作,直接跳过即可,同时值保持0.需要注意的是一旦起点和终点有障碍物直接返回0即可。

2023-07-01 06:35:36 167

原创 【代码随想录刷题记录】、 509. 斐波那契数 、 70. 爬楼梯 、 746. 使用最小花费爬楼梯

本题的重难点在于找递推公式,在找递推公式的时候不要忘记i所代表的原始含义。爬i层楼梯,可以分别从i-1爬1步到达和从i-2爬两步到达,故i的爬法数量就等于i-1的加上i-2的。在完成动态规划类型题目时,需要确定递推公式,同时在确定递推公式的基础上需要确定dp数组的初始化以及遍历的顺序。第i层楼梯可以从i-1层或者i-2层到达,故第i层的花费为i-1层的花费加上cost[i-1]和i-2层花费加上cost[i-2]中最小值。F(n) = F(n - 1) + F(n - 2),其中 n > 1。

2023-06-30 12:20:30 31

原创 【代码随想录刷题记录】 738.单调递增的数字 、 968.监控二叉树

首先将数字n转化为字符串,从后往前遍历字符串,若遇 到 i - 1处的数字大于当前位 i 的数字的情况就说明该部分不符合递增规律,更新记录下当前位 i,并修改i - 1位的元素使其减1。该题的局部最优是叶子节点不安排监控,而是在其父节点上安排。因此需要从下往上进行遍历,按照节点有无覆盖和监控器分成不同的情况,同时在遍历的过程中根据其子节点的情况判断是否需要在该节点上安排监控器。题目链接:https://leetcode.cn/problems/monotone-increasing-digits/

2023-06-29 11:59:20 36

原创 【代码随想录刷题记录】 435. 无重叠区间 、 763.划分字母区间 、 56. 合并区间

再遍历一遍字符串,left用于表示左边界只有在完成一个区间时也会进行改变,right表示右边界,在遍历的过程中需要不断更新为遍历过的字符中的最后一次出现位置,直到 i == right表明后序区间不会再出现该区间内的全部字符,可以划分为一个区间。要求去掉重叠区间留下重叠区间,那么只需要找出非重叠的区间的数目,将全部区间数减去非重叠的就可以的到需要移除的区间数目。遍历区间数组,将没有重叠的区间压入result中,如果发现区间重叠就更改重叠区间的右区间,若没有就压入新的区间到result中。

2023-06-28 16:58:38 25

原创 【代码随想录刷题记录】 860.柠檬水找零 、 406.根据身高重建队列 、 452. 用最少数量的箭引爆气球

首先需要对points数组按照xstart从小到大排序,遍历排序后的数组,将当前气球右边界与前一气球的左边界进行比较,若两个气球并没有重叠叠就将箭数加1,若有重叠就将当前气球的右边界改为重叠的两个气球的边界最小值,如何继续下一个气球的比较。需要注意的是result的初始值要为1,因为每次一堆气球中最后一支箭并没有加1,需要提前写入。可以射出的弓箭的数量 没有限制。在整个找零的过程中,记录下收到的5和10的张数,根据需要找零的数目进行找零并修改剩余零钱数目,只要遇到找不了的情况直接返回false即可。

2023-06-27 11:36:11 45

原创 【代码随想录刷题记录】 1005.K次取反后最大化的数组和 、 134. 加油站 、135. 分发糖果

遍历数组,累加每天剩余的油量,若剩余的油量为负就说明不可以到达该点,那么也就是说至少要从下一个加油站开始才有可能进行一圈。遍历完数组后,得知全部加油量的总和小于消耗的油量则就说明不论从哪个个点开始都不能遍历完一圈,如果全部加油量总和大于消耗的,则表示一定可以转完一圈,此时若从某一点其到最后一个加油站,剩余量的和为正就说明从该点可以出发。该题不能一次性完成分配操作,由于当分配到一个小孩时其相邻的小孩分数都比其高,就要去修改该小孩左边的小孩的分配数量,而右边的小孩则继续,这样很不方便。n 个孩子站成一排。

2023-06-26 11:05:59 24

原创 【代码随想录刷题记录】 122.买卖股票的最佳时机II 、 55. 跳跃游戏 、 45.跳跃游戏II

记录当前的最远距离,在当前最远距离中都是可以一步达到的,遍历当前最远距离中的点,记录并更新下一步的最远距离,当移动到最远这样我们就记录到了通过一步可以到达的下一步的最远距离,也就是说走第二步时可以到达的最远距离,此时再将步数加一即可。该题的局部最优就是争取每次覆盖最大范围,i的遍历范围只能在其覆盖范围内,每移动一位就需要更新最大范围,若最大范围超过了数组最大值就表示可以到达,否则不能到达。题目链接:https://leetcode.cn/problems/jump-game-ii/

2023-06-24 08:34:47 43

原创 【代码随想录刷题记录】 455.分发饼干 、 376. 摆动序列 、 53. 最大子序和

并且每块饼干 j,都有一个尺寸 s[j]。对s和g进行从小到大的排序,将每个s中的元素分配当作一个局部分配,将这次分配分配给刚刚好的或者稍微大一点的孩子,达到局部最优即小饼干先喂饱小胃口,最后可以得到全局最优。相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。

2023-06-23 17:29:42 24

原创 【代码随想录刷题记录】回溯算法总结

在做关于回溯算法的题目时,首先需要将题目意思抽象成为树型结构,便于后序的理解。其次就是根据回溯算法的大体模板找到终止条件以及单层的操作步骤。最后,在上述完成的代码基础上进行剪枝、去重以及优化等操作。在对回溯算法的学习中,我了解到回溯算法的本质就是递归和循环的应用,因此回溯算法可以应用在需要递归和循环的场合,如组合问题、排列问题、切割问题、子集问题以及棋盘问题。

2023-06-22 09:26:22 33

原创 【代码随想录刷题记录】 491.递增子序列 、 46.全排列 、 47.全排列 II

需要注意的是这不是单纯的遍历,在遇到下一个数字小于path中最后一个时,跳过当前循环,同样在同一层遇到重复数字时也需要跳过。在选择一种排列的过程中已经使用过的元素不能再使用,使用used辅助判断,但需要记得回溯。该题与上题类似,在上题的基础上进行同层去重,需要主要的时一定要确定好上个相同元素是否用过,不然会出错。题目链接:https://leetcode.cn/problems/permutations-ii/题目链接:https://leetcode.cn/problems/permutations/

2023-06-21 11:52:09 55

原创 【代码随想录刷题记录】 93.复原IP地址 、 78.子集 、 90.子集II

给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。给你一个整数数组 nums ,数组中的元素 互不相同。给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。

2023-06-20 10:32:52 19

原创 【代码随想录刷题记录】 39. 组合总和 、 40.组合总和II 、 131.分割回文串

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。其次,只有是回文串才需要写入path中,只要在分割的过程中产生一个非回文串就没必要进行下一轮的分割直接跳过该轮循环即可。给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。回文串 是正着读和反着读都一样的字符串。

2023-06-19 11:35:07 26

原创 【代码随想录刷题记录】 216.组合总和III 、 17.电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。注意 1 不对应任何字母。题目链接:https://leetcode.cn/problems/letter-combinations-of-a-phone-number/只使用数字1到9,每个数字 最多使用一次 ,返回 所有可能的有效组合的列表。题目链接:https://leetcode.cn/problems/combination-sum-iii/本题与昨天的关于组合的题目类似,在组合的基础上只需要增加一个对于和的限制条件即可。

2023-06-17 10:16:19 30

原创 【代码随想录刷题记录】 77. 组合

使用回溯算法,需要将题目问题转化成树的结构更方便理解。在书写回溯法相关代码时,需要注意终止条件以及单层逻辑的书写,在书写完成后可以根据算法进行剪枝操作。题目链接:https://leetcode.cn/problems/combinations/给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。

2023-06-16 10:06:16 18

原创 【代码随想录刷题记录】669. 修剪二叉搜索树 、 108.将有序数组转换为二叉搜索树 、 538.把二叉搜索树转换为累加树

题目中给的是有序数组以及要求子树高度差不超过1,可以将数组最中间的数当作根节点,并将数组划分为左右两个区间,根节点的左孩子为左区间的中间节点,右孩子为右区间的中间节点。给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。题目链接:https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/

2023-06-15 10:55:37 13

原创 【代码随想录刷题记录】 235. 二叉搜索树的最近公共祖先 、 701.二叉搜索树中的插入操作 、 450.删除二叉搜索树中的节点

向二叉搜索树中插入节点,只需要按照二叉搜索树的关系进行遍历直到找到第一个为空的节点,该位置即为插入节点的位置。可以使用带返回值的,也可以使用不带返回值的,带返回值只需要判断当前节点是否为空,不带返回值需要判断当前节点的左右孩子是否为空,后者较为不方便。若均大于则表明p、q节点在该节点的左子树中,若均小于则表示p、q节点在该节点的右子树中,根据以上条件进行递归操作。给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。如果找到了,删除它。

2023-06-14 04:52:10 14

原创 【代码随想录刷题记录】 530.二叉搜索树的最小绝对差 、 501.二叉搜索树中的众数 、 236. 二叉树的最近公共祖先

在遍历的过程中比较当前节点值与中序遍历访问前节点的值,若相同则计数加一,否则重新计数。题目链接:https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/题目链接:https://leetcode.cn/problems/find-mode-in-binary-search-tree/给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。

2023-06-13 10:46:15 21

原创 【代码随想录刷题记录】 654.最大二叉树 、 617.合并二叉树 、 700.二叉搜索树中的搜索 、 98.验证二叉搜索树

合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。使用前序遍历,借助root1树来构建合并二叉树,同步遍历root1和root2,若两者不为空则更新root1节点的值,若root1为空则返回root2的节点,若root2为空就返回root1的节点。可以通过中序遍历判断当前节点与遍历前的节点的值的大小,若符合递增则返回true,否则返回false。给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

2023-06-12 12:00:03 24

原创 【代码随想录刷题记录】 513.找树左下角的值 、 112. 路径总和 、 113.路径总和ii 、 106.从中序与后序遍历序列构造二叉树 、105.从前序与中序遍历序列构造二叉树

与手动通过中序后序构建二叉树的过程类似,后序的最后一个节点为该二叉树的根节点,在中序中找到该节点的位置,其左边为左子树的前序,右边为右子树的前序,同理对后序序列进行划分就可以继续左、右子树的构建。题目链接:https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/判断最左节点,只需要该叶子节点是在所有叶子节点中深度最大,采用前序遍历,左孩子优先遍历就可以保证最后输出的最左叶子节点。

2023-06-10 11:10:55 74

原创 【代码随想录刷题记录】110.平衡二叉树 、 257. 二叉树的所有路径 、 404.左叶子之和

由于需要求树的高度,故采用后序遍历,同时当该树不是平衡二叉树时,没有必要返回树的高度,只需要返回-1(记录该树不为平衡二叉树)。该题采用后序遍历,其重点是判断该节点是否为左叶子,我们对叶子节点不操作,从含有左叶子的父节点操作,这样便于判断。题目链接:https://leetcode.cn/problems/balanced-binary-tree/题目链接:https://leetcode.cn/problems/sum-of-left-leaves/给定二叉树的根节点 root ,返回所有左叶子之和。

2023-06-09 16:54:45 99

原创 【代码随想录刷题记录】 104.二叉树的最大深度、 559.n叉树的最大深度 、 111.二叉树的最小深度 、 222.完全二叉树的节点个数

若输入的结点为空,就返回高度为0,否则计算该结点的左、右孩子的高度,取最大值加1就为该结点的高度。左右子树都不为空,其高度为左右子树最小高度加1,若其中有一个子树为空,则高度为不为空的子树最小高度加1。最后带入根节点,根节点的最小高度也就等于最小深度。题目链接:https://leetcode.cn/problems/maximum-depth-of-n-ary-tree/二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。使用层次遍历,每遍历一层就深度加1,最后遍历结束就可以得到该n叉树的最大深度。

2023-06-08 10:32:02 159

空空如也

空空如也

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

TA关注的人

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