自定义博客皮肤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天的坚持,52篇博客,142道力扣题,自己还是做到了😄 遥想从1月刷到现在已经过去两个月,令人感慨,确实就像一句话说的那样:没有比脚更长的路,没有比人更高的山。朋友们,想做就行动吧。抒情环节完毕,下面回顾刷题内容:从基础的数据结构,数组、链表、哈希表、字符串,到高级一些的数据结构如栈、队列、树。之后就是最后一章单调栈,略微遗憾的是单调栈的有些题目一刷的时候确实迷迷糊糊过去了,没太搞明白,二刷再战。很难说自己短短两个月的时间就脱胎换骨,从小白变成大佬,不怕慢就怕站,慢慢走,最后会到终点的。

2024-03-14 15:22:39 739 1

原创 代码随想录刷题第60天

和接雨水遥相呼应的一道题,我们需要找到当前遍历数字左右两边第一个小于当前数字的值,通过保证单调栈中数字为递减顺序,来达到这一效果。此时栈顶元素,栈中下一元素与即将进栈元素构成了我们要求最大面积矩形的高度与宽度,其他逻辑与接雨水大致相同!最后一题是柱状图中最大的矩形。

2024-03-14 15:02:20 505

原创 代码随想录刷题第59天

通过单调栈确定左边和右边第一个比当前元素大或者小的元素值,若遍历发现当前元素值大于栈顶元素值,说明凹槽出现,可以承接雨水了。当遍历发现元素值相同时,更新栈顶元素,本题和刷过的每日温度如出一撤,不过是搞点花样,把数组弄成循环遍历的了。学过数据结构的朋友都知道循环队列,用取模运算表示循环过程,套到这里就行了。说实话,接雨水这个确实没太搞懂,只能二刷的时候再体会一下了。第一题是下一个更大元素II。

2024-03-13 17:02:27 571

原创 代码随想录刷题第58天

本题需要给出该天之后第一次温度高于该天的日期是在几天后。我们可以设想这样一种数据结构:它能存放当前遍历元素之前日期的信息,若找到第一次比某天温度高的日期就立即进行处理,同时还能是数据结构中的元素保持有序,这种数据结构就是单调栈。我们在这个栈中存放单调递增的元素,当遍历发现当前元素大于栈顶元素,立即记录两者下标的差值并弹出栈顶元素,若小于,就加入栈中,再次向后遍历,我们就能找到距离该元素最近的满足要求的元素下标。用单调栈有点大炮打蚊子😄首先用map进行一个数值与下标的映射,方便快速找到各个元素的下标值。

2024-03-12 18:07:10 517

原创 代码随想录刷题第57天

值得注意的是,dp[i][j]状态与dp[i + 1][j - 1]的状态一致,对于i、j的遍历应该采取不同的顺序,i从大到小遍历,j从小到大遍历,这是与递推公式里状态转移的过程息息相关的。当s[i] == s[j] 时,内侧的最长回文子序列长度加2,dp[i][j] = dp[i+1][j - 1] + 2;= s[j]时,说明两字符不能同时加入回文子串,应当分开讨论,若不取s[i],dp[i][j] = dp[i + 1][j] ,若不取s[j],dp[i][j] = dp[i][j - 1]。

2024-03-11 16:31:44 726

原创 代码随想录刷题第55天

当两者不同时,需要删除操作,可以删除word1[i - 1],也可以删除word2[j - 1],也可以同时删除word1[i - 1]与word2[j - 1],dp[i][j]在dp[i - 1][j] + 1、dp[i][j - 1] + 1、dp[i - 1][j - 1]中取最小值,dp[i][j] = min(dp[i -1][j] + 1, dp[i][j -1] + 1, dp[i - 1][j - 1] + 2)。同理dp[i][0] = i。第一题是两个字符串的删除操作。

2024-03-10 19:06:23 496

原创 代码随想录刷题第54天

综上dp[i][j] = dp[i-1][j-1] + dp[i - 1][j]。= t[j - 1],说明此次并未出现新的匹配,dp[i][j]的状态与遍历i-1前相同,即dp[i][j] = dp[i - 1][j]。当发现str1[i - 1] == str2[j - 1]时,相同子序列长度加一,dp[i][j]=dp[i - 1][j - 1] + 1,当发现str1[i - 1]!dp[i][0],dp[0][j]表示字符串与空串的匹配情况,故dp[i][0],dp[0][j]均初始化为0。

2024-03-09 14:41:11 834

原创 代码随想录刷题第53天

上动规五步曲:dp[i]表示以nums[i]为结尾的最大子数组和,由于题目要求最大子数组连续,因此dp[i]的状态与dp[i - 1]息息相关,同时nums数组中正数负数都存在,当遍历到nums[i]时发现大于dp[i - 1] + nums[i],则说明dp[i -1]小于0,此时应舍弃dp[i -1]重新从nums[i]取得最大子数组和。= nums[j - 1]时,dp[i][j]状态取决于dp[i - 1][j] 与dp[i][j-1]当中的最大值,相当于各自将序列后退一个元素以避开不相同元素。

2024-03-08 19:37:18 543

原创 代码随想录刷题第52天

dp[i]的状态与i之前的每个状态都有关,由于递增子序列在数组中并不是连续存在的,所以我们要遍历i之前的每一个数,若发现nums[i]大于遍历到的数,则dp[i]等于以该数为结尾的最大递增子序列长度+1,即dp[i] = max(dp[i], dp[j] + 1)。3.初始化dp数组。当nums1[i - 1] == nums2[j - 1]时,dp[i][j] = dp[i - 1][j - 1] + 1。初始化dp[i][0],dp[j][0] 为0,两层for循环遍历数组1,2。

2024-03-07 21:15:55 512

原创 代码随想录刷题第51天

若第i天持有股票,可能前一天也持有股票,dp[i][1] = dp[i-1][1];也可能是第i-2天卖出股票,即第i-2天时不持有的状态,经历了一天的冷冻期,第i天重新买入股票,dp[i][1] = dp[i-2][0] - prices[i]。dp[0][1]对应第0天持有股票,即在第0天买入股票,dp[0][1] = -prices[0]。dp[1][1]表示第一天持有股票,则可能在第0天或第1天购入,dp[1][1] = max(dp[0][1], -prices[1])。从前向后遍历dp数组。

2024-03-06 17:57:13 647

原创 代码随想录刷题第50天

dp[0][3] 对应二次买入的操作,dp[0][3] = dp[0][1]。建立一个大小为prices.size() * 2k+1大小的二维dp数组,递推公式dp[i][j+1] = max(dp[i-1][j+1] , dp[i-1][j] - prices[i]);

2024-03-05 18:52:56 664

原创 代码随想录刷题第48天

若第i天持有股票,则也有两种情况:第i天前已持有股票,dp[i][0] = dp[i - 1][0];第i天时买入股票,dp[i][0] = - prices[i],dp[i][0]在两者中取最大值即可。第i天时卖出股票,dp[i][1] = prices[i] + dp[i - 1][0],dp[i][1]取两者之间的最大值。,该题中股票可以被多次买出卖出,对于上一题中的dp[i][0]而言,当是第i天买入股票时,dp[i][0] = dp[i - 1][1] - prices[i]。

2024-03-02 22:05:38 1189

原创 代码随想录刷题第47天

上动规五步曲:dp[i]为考虑包括i在内的前i个房间可以偷窃的最大金额数。对于第i个房间有偷与不偷两种状态,偷则dp[i] = dp[i - 2] + nums[i]。从题意中得到dp[0]=nums[0],dp[1]=max(dp[0] , dp[1])。返回该节点两种状态下能偷到的最大钱币数量,dp[0]是不偷该点时能得到的最大钱币数,dp[1]是偷该点时能得到的最大钱币数。第三题是打家劫舍III。

2024-03-01 19:35:57 662

原创 代码随想录刷题第46天

不妨将单词看作一个个物品,字符串看作需要装满的背包,由于能够重复使用字典中的单词,所以这是一道完全背包问题。dp[i]为true时表示长度为i的字符可以被字典中的单词拆分。当dp[j]为true时,遍历发现串[j, i]在字典中,则dp[i]一定为true。初始化dp[0]为true,其余dp数组值初始化为false。由于本题中字典单词的排列会影响字符串的组成,因此可视作求排列数,先遍历背包,再遍历物品。

2024-02-29 19:45:21 383

原创 代码随想录刷题第45天

取coins[i]时,dp[j] = dp[j - coins[i]] + 1;不取coins[i]时,dp[j] = dp[j],因此dp[j] = min(dp[j], dp[j - coins[i]] + 1)。进行动规五步曲的分析:dp[j]为爬到第j层的方法数量,即到达楼梯数量为j的楼顶共有dp[j]种方法。已知背包容量,装满背包的方法dp[j] += dp[j - nums[i]]。,稍加分析可以发现本题与零钱兑换完全一致,就是把1,4,9这些平方数视为零钱面额,代码稍作修改就能ac。

2024-02-28 16:02:55 664

原创 代码随想录刷题第44天

这道题中我们已知求出装满背包的方法数量对应的递推公式为 dp[j] += dp[j - nums[i]],将dp[0]初始化为1,其余dp值初始化为0,由于该题求出的方法都属于组合问题,即选取硬币的顺序不会对组合数量产生影响,所以采取先遍历物品后遍历背包的方法。,结构与上题基本相同,唯一不同在于遍历顺序,若是先遍历物品在遍历背包,则不同物品进入背包的顺序是确定的,故不能求出不同顺序的排列。,用无限个面额的硬币凑出结果,很典型的完全背包问题,直接上动规五步曲。第二题是零钱兑换II。第三题是组合总和IV。

2024-02-27 15:51:15 499

原创 代码随想录刷题第43天

没啥思路,直接上题解了。接下来按照动规五步曲进行分析,dp[j]表示容量为j的背包中可以装的最大重量为dp[j],对于第i块石头,可以取也可以不取,故dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]),初始化dp = 0,先遍历物品,再遍历背包即可。dp[i][j]可由去掉上一个字符串时dp[i - 0nums][j - 1nums]得出,即dp[i][j] = max(dp[i][j], dp[i - 0nums][j - 1nums] + 1)。

2024-02-26 20:49:54 648

原创 代码随想录刷题第41天

使用动规五步曲进行分析,使用二维数组do[i][j]表示下标从0到i货物装在容量为j背包中的最大价值,dp[i][j]可由不放物品i(dp[i -1][j])与放置物品i(dp[i - 1][j - weight[i]])两个方向确定,可得递推公式为dp[i][j] = max(dp[i -1][j], dp[i - 1][j - weight[i]])。dp数组其他位置初始化为0即可,因为这些位置的值是由dp[i - 1][j]与dp[i - 1][j - weight[i]]决定的。

2024-02-24 23:33:40 640

原创 代码随想录刷题第40天

根据动规五步曲,确定dp[i]为1到i节点组成的不同二叉搜索树数量。dp[i] = 头节点元素为1时的二叉搜索树数量 + 头节点元素为2时的二叉搜索树数量 + ··· + 头节点元素为i时的二叉搜索树的数量。dp[i] += dp[j - 1] * dp[i - j],j - 1为j子树的左子树元素个数,i - j 为j子树的右子树元素个数。dp[0]为0个节点组成的二叉搜索树,即空树,故dp[0] = 1。从前到后遍历dp数组。第二题是不同的二叉搜索树。

2024-02-23 21:07:57 781

原创 代码随想录刷题第39天

按照动规五步曲,由于本题中涉及了两个维度m,n,故设定二维dp数组dp[i][j],表示到达i j位置时的不同路径数量。机器人只能向下或向右移动一步,因此dp[i][j]只与它的左一格和上一格有关,dp[i][j]= dp[i-1][j] +dp[i][j - 1]。初始化dp[0][j]与dp[i][0]为1,因为到达这两行中各点的路径数量只有1种。,与上一题相似,区别在于dp数组的初始化,当在第一行或第一列中有障碍出现时,障碍之后的位置无法到达,无需初始化。第二题是不同路径II。

2024-02-22 20:45:29 528

原创 代码随想录刷题第38天

由于一次上楼梯的次数限制,故dp[i]只与dp[i-1],dp[i-2]有关,取两者到达第i层花费体力的最小值可得:dp[i] = min(dp[i -1] + cost[i - 1], dp[i - 2] + cost[i - 2]。,根据动态规划五步曲,首先确定dp[i]即为到达第i阶的方法数量,由于每次只能上一或二个台阶,所以dp[i]只与dp[i-1],dp[i-2]有关,dp[i] = dp[i-1]+dp[i-2]。初始化dp[1]=1,dp[2]=2,从前向后遍历dp数组即可。

2024-02-21 22:10:42 608

原创 代码随想录刷题第37天

用最小的摄像头数量监控二叉树的所有节点。首先确定应在叶子结点的父节点放置摄像头,再每次隔两个结点向上遍历,用不同状态记录所有节点情况,知道所有节点均被覆盖。很复杂的一道题,直接看的卡哥思路了。,给出小于题目值的最大数,且该数的各位都要满足单调递增。从后向前遍历字符串,若不满足单调递增,则将前一位数字减一,同时将后续数字置为9。刷完贪心,确实感觉没什么规律可循,有的很简单,有的又很难,不过能认真刷完一遍还是要给自己竖一个大拇指哈哈。今天要和贪心算法说再见了。第一题是单调递增的数字。最后一题是监控二叉树。

2024-02-20 21:34:48 468

原创 代码随想录刷题第36天

该题是哈希与贪心的综合,首先用哈希方法统计字符串中个字母的最远出现位置,在向后遍历过程中不断记录不同字母的最远位置,到达最远位置时记录结果,更新区间左端位置,再次向后遍历。,先判断是否重叠,若重叠,更新右边界,若不重叠,直接讲区间加入结果集中。,与昨天用箭射气球的逻辑相同,按左边界排序,找出重叠区间数量即可。今天的题目都与重叠区间有关。100题目标达成,给自己留个纪念哈哈😄加油。第二题是划分字母区间。

2024-02-19 21:26:40 572

原创 代码随想录刷题第34天

想用最小的弓箭数射最多的气球,使气球尽可能重叠就可以了。所以需要将气球左区间进行排列,判断相邻气球的左右区间情况,若当前气球右区间大于上一气球左区间,则需要弓箭数加一。若不大于,则将两气球视为重叠气球,同时更新一下重叠气球的右区间,一遍判断与下一气球的重叠情况。,感觉并没有特别靠近贪心算法,可供讨论的情况非常少,5元收下,10元返5元,20元返15元,对各种找零情况讨论一下即可。,两个维度,先确定身高,再确定人数,身高从大到小排列后对人数放心插入即可,因为前方都是大数,小数的插入并不影响第二维度。

2024-02-17 22:08:35 1203

原创 代码随想录刷题第33天

需要两次遍历确定当前元素与两边元素的大小关系。从前向后比较当前元素与左侧元素的大小关系,再从后向前比较当前元素与右边元素的大小关系。,使用了两次贪心策略:第一次是优先将绝对值大的负数进行取反,若负数取完后,取反次数仍有剩余,则将小正数进行取反。贪心的解法是求出每一站的剩余油量并相加,如果当前遍历发现剩余油量小于0,则重新从下一站开始遍历。,容易想到的思路是从各个位置开始遍历,知道找出满足要求的起始位置为止,但是代码不好写。第一题是k次取反后求数组最大和。

2024-02-16 21:34:59 568

原创 代码随想录刷题第32天

自己的想法是只要将对应元素大小作为跳跃距离,最后的跳跃距离能够超出数组大小则一定可以到达末尾。但是写出的代码始终不能ac。看了卡哥的思路,才发现是用覆盖范围确定最后一个元素是否能被覆盖掉。,题目很唬人,但事实上就是遍历一遍数组,求出所有利润为正的情况加和就行,代码很简单。,求出到达终点的最少步数。就是看覆盖范围到达末尾的最小更新次数。今天继续贪心算法的学习。第一题是买卖股票的最佳时机。第三题是跳跃游戏的进阶。

2024-02-15 21:17:16 462

原创 代码随想录刷题第31天

俗话说,年好过,月难熬。过年稍作休息5天,今天接着打代码。今天进入贪心算法章节。贪心算法的主要思想就是局部最优推出全局最优,与回溯算法不同的是,贪心并无什么固定的范式或策略,也就不存在所谓模版套路了。,不难发现,当目前遍历的连续序列和小于0时,舍弃该序列。明确了思路,代码还是很简单的。,局部最优是优先满足胃口大的孩子,先分发大饼干。,删除单调过程中的点,保留峰值,确定摆动数量。第三题是最大子序列和。

2024-02-14 23:55:07 532

原创 代码随想录刷题第30天

思路并不难懂,通过每行遍历,将列依次放入皇后,向下一行递归,并调用isValid函数判断合法性,若当前位置合法,则放入皇后。明天就是大年三十了,首先祝各位朋友新年快乐,新春愉快!巧合的是,今天正好是回溯章节的收尾,这也是辞旧迎新的好兆头。,一道难题,确实有点超出自己的能力就看看题解抄一遍代码ac了。,作为回溯章节的压轴题,与其他题目最大的不同就是该题需要两个for循环确定一个点。刷完了回溯,给我的感觉是回溯像一个已经有框架的楼房,只需要在某些部分上添加东西。第二题是大名鼎鼎的N皇后问题。

2024-02-08 23:30:32 449

原创 代码随想录刷题第29天

从数组中选取递增数列,与上一题子集问题类似,都是要在每个节点中取到自己的结果。但要注意到该问题中数组并不能排序处理,本题要求是要递增子序列,排序后就没意义了。本题中的去重操作也要注意,利用hash方法确定元素是否被重复使用。,正式从组合问题进入排列问题。与组合问题不同的是,我们无需再考虑树层去重,只需在同一树枝上对已使用元素进行标记即可。,要求在存在重复元素的数组中求出所有不重复的排列。需要灵活运用树枝去重与树层去重。还有一种去重方式,即使用数组方法,效率更高。第三题是全排列的延伸。

2024-02-08 18:53:15 428

原创 代码随想录刷题第28天

收集整数数组中所有的子集。子集问题与组合问题的不同之处在于树中每个结点都需要收集,即每层递归的结果都要加入result中。,与上一题分割回文串类似,都是利用start index进行切割。这道题具体细节也很多,代码自己打一遍才感受的出来。,是上题的进阶,不过要注意去重操作,做起来不难,一遍代码就ac了。第一题是复原ip地址。

2024-02-06 22:36:52 480

原创 代码随想录刷题第27天

第一遍写出的代码没有将最终的result数组去重,编译不通过。第二遍写出的代码虽然进行了去重,但仍没有通过,看了卡哥的视频才发现是去重去多了,错误进行了树枝去重而不是树层去重。该题的剪枝操作需要先将数组排序,发现当前层的sum与遍历元素和大于targetsum时,对于后序更大的元素就没必要遍历了。看了卡哥讲解发现确实是一道难题,切割过程用组合方式模拟不好想,细节很多。今天的题目总体难度并不大,主要还是对回溯代码思想的理解,重点在分割回文串这道题,该题细节较多,二刷时应注意。今天第一题是组合总数。

2024-02-05 22:05:29 650

原创 代码随想录刷题第25天

第一题是组合总和,求满足大小为k,和为n的所有组合,根据回溯三部曲,确定以下参数:目标和targetsum,已有和sum,目标大小k,递归下标startsum。不难注意到,当前代码中许多情况是可以避免的,当sum值过大时,后续元素的递归就不需要了,同时本题中对组合的大小有要求,当遍历到后续元素数量无法满足要求时,也可以直接跳出循环。通过这几题的解决,不难发现回溯法的代码形式较为固定,即终止条件——for循环遍历——递归——回溯。第二题是电话号码的字母组合,

2024-02-04 21:56:32 498

原创 代码随想录刷题第24天

不难发现,当i达到一定值的时候,剩余元素无论怎么取也无法取到符合要求的组合了,因此我们可以通过剪枝操作来提高代码效率。具体操作就是减小i的右区间。看了看文章介绍,回溯并不是很高效的算法,本质上是穷举操作。第一题为组合问题,用树形结构模拟,利用回溯算法三部曲,确定终止条件与单层逻辑,写出如下代码。

2024-02-03 23:59:24 692

原创 代码随想录刷题第23天

二叉树这一章节结束了,这一章节涉及了树的遍历,构造与修改,二叉搜索树的相关性质,收获满满😄回归知识之余,也感慨我在磕磕绊绊中坚持了下来,坚持很苦,奋斗很酷!二叉树的最后一题是将二叉搜索树转化为累加树。第一题是修剪二叉搜索树,要注意修剪时被删除节点的子树可能符合要求,因此还需向下遍历。第二题是将有序数组转换为平衡二叉搜索树,借鉴二叉搜索树节点的插入,进行数组的区间分割,由于要求构造树的平衡性,根节点应选在数组中间处。

2024-02-02 23:14:31 624

原创 代码随想录刷题第22天

第二题是二叉搜索树的插入操作,明确了在叶子节点插入时,难度就没有那么大了。不过如何构建父子关系我没有想到,卡哥直接用叶子节点的左右子树来接递归遍历结果,这个很巧妙,第一次想确实很难想到。第三题是删除二叉搜索树的节点,主要是要考虑到删除节点的几种情况:左右为空,左右不为空,左右有一个为空,同时该题依然是通过函数返回值的方式完成删除。迭代法等二刷再掌握了。由于二次搜索树自带有序性,当发现root值在p和q之间时可直接确定root即为所求,若小于向左遍历,若大于向右遍历。

2024-02-02 00:14:50 555

原创 代码随想录刷题第21天

第二题是二叉搜索树中的众数,还是只想到了中序遍历转换为数组,由于二叉搜索树的特性,数组中的众数一定是相连的,但是后续收集众数卡住了,看看卡哥视频。还是用双指针,count记录众数出现次数很巧妙,当发现有更大的count出现时清空result数组。第一题是二叉搜索树的最小绝对差,初始思路是中序遍历将二叉搜索树转换为有序数组,在有序数组中进行遍历。(手机打代码真的麻烦)最后一题是二叉树的最近公共祖先,该题难度较大,直接上题解了。利用后序遍历从下往上传递节点。看卡哥讲解会了双指针法遍历。

2024-01-31 23:32:54 495

原创 代码随想录刷题第20天

利用前序遍历,先寻找数组中最大元素作为中间根节点,接着分割左右,依次递归。基础解法就是将二叉搜索树的中序遍历结果转化为一个数组。下面是不用数组的代码,用两个指针判断大小,更简洁有效。主要思路就在于二叉搜索树的中序遍历结果是有序的。看了卡哥讲解,发现迭代法也很简单。,没啥好想法,直接上卡哥的解析了。最近可能要出去旅游,断更几天😄。第三题是进行二叉搜索树的搜索。,知识盲区,看看卡哥思路。最后一题是验证二叉搜索树。

2024-01-30 22:25:17 538 1

原创 代码随想录刷题第18天

递归方法通过更新叶子结点的深度值,先遍历左,后遍历右,保证找到的第一个深度最大的叶子结点是最后一行最左侧的点。,有点想法了,写了一遍发现细节还是不清楚,如何由下向上返回判断结果。今天的最大收获是用中序和后序,中序和前序建立二叉树。再一次加深了对递归和回溯的掌握。重点在于切割两个数组,再对切割结果进行递归。,不过此题需要我们遍历整颗树,因此递归函数不需要返回值。卡哥提到了层序遍历,上手写一下,一遍整出。下一题是用前序和中序构造二叉树,照猫画虎。下标法规避了建立vector的麻烦。迭代用栈也是可以的。

2024-01-27 23:01:04 551 1

原创 代码随想录刷题第17天

初步思路是利用递归算node->left与node->right的差。卡在了如何表示node->left与node->right之差。递归返回值记录左右子树的平衡情况,平衡return height,失衡return -1,终止条件为node == NULL,return 0,单层递归的逻辑为判断左右子树高度之差,>1 return -1,否则return高度。,由于此题需要寻找父节点到叶子结点的路径,应此应先处理中间结点,用前序遍历的方式是最合适的。第二题是二叉树的所有路径。下面是迭代法的代码。

2024-01-26 20:36:55 461 1

原创 代码随想录刷题第16天

区分了高度与深度,一个指向到叶子结点的距离,一个指向到根节点的距离。因此求最大深度的过程就可以转换为求根节点的最大高度。完全二叉树的思路是通过递归找到子树中的满二叉树,利用公式求出满二叉树的节点个数并相加得到结果,很精巧的思路。,重点也是后序遍历的过程,通过求最小高度转化为最小深度。,卡哥先提到了求一般二叉树的思路,前中后序遍历均可。,先想到的是层序遍历,试一下。总体来看今天的题目是递归的进一步运用。前序遍历就是直接求最小深度。第二题是求二叉树的最小深度。第一题是二叉树的最大深度。

2024-01-26 11:49:53 537 1

空空如也

空空如也

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

TA关注的人

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