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

原创 【二刷】代码随想录算法训练营day01| 二分合集: 704. 二分查找| 35. 搜索插入位置|34. 在排序数组中查找元素的第一个和最后一个位置|69.x的平方根|367.有效的完全平方数

二分合集

2023-10-11 15:45:37 686

原创 代码随想录算法训练营总结篇|完结撒花

之前刷B站的时候就有学习up推荐算法可以看看代码随想录,当时也关注了代码随想录的公众号,这不刚好给我刷到了训练营的推文,二话不说直接报名。60天下来收获还是非常多的。光笔记在就typora写了16w词,放两张图震撼一下自己,也养成了写博客的习惯,看到博客里一天一天坚持的博文还是很有成就感的。

2023-09-25 10:06:31 1910 1

原创 代码随想录算法训练营day60|84.柱状图中最大的矩形 |完结撒花~

头尾要加0 ,如果数组本身就是升序的,例如[2,4,6,8],那么入栈之后 都是单调递减,一直都没有走 情况三 计算结果的哪一步,所以最后输出的就是0了,那么结尾加一个0,就会让栈里的所有元素,走到情况三的逻辑。如果数组本身是降序的,例如 [8,6,4,2],在 8 入栈后,6 开始与8 进行比较,此时我们得到 mid(8),rigt(6),但是得不到 left。之后又将6 加入栈(此时8已经弹出了),然后 就是 4 与 栈口元素 8 进行比较,周而复始,那么计算的最后结果resutl就是0。

2023-09-23 18:33:00 244

原创 代码随想录算法训练营day59|503.下一个更大元素II |42.接雨水

给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。取连个中间小的, 再减去本列高度 就是能接的高度 再*1 就是体积。主要考虑怎么循环,遍历的时候走两遍nums.length*2。的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。思路其实和上面是一样的 也是求左边大的和右边大的。两个遍历,一个遍历右边最高,一个遍历左边最高。

2023-09-22 17:23:52 225

原创 代码随想录算法训练营day58|单调栈|739. 每日温度|496.下一个更大元素 I

例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。对于 num1 中的数字 4 ,你无法在第二个数组中找到下一个更大的数字,因此输出 -1。输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输出: [-1,3,-1]

2023-09-22 15:59:40 167

原创 代码随想录算法训练营day57|647. 回文子串|516.最长回文子序列

力扣题目链接给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。示例 1:示例 2:提示:输入的字符串长度不会超过 1000 。1.确定dp数组(dp table)以及下标的含义布尔类型的:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是为true,否则为false。2.确定递推公式在确定递推公式时,就要分析如下几种情况。整体上是两种,就是s[i]与s[j]相等,s[i]与s[j]不相等这两种。当s

2023-09-20 10:27:31 225

原创 代码随想录算法训练营day56|583. 两个字符串的删除操作|72. 编辑距离

本来就不考虑 word2[j - 1]了,那么我在删 word1[i - 1],是不是就达到两个元素都删除的效果,即。:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2,想要达到相等,所需要删除元素的最少次数。:word2为空字符串,以i-1为结尾的字符串word1要删除多少个元素,才能和word2相同呢,很明显。情况三:同时删word1[i - 1]和word2[j - 1],操作的最少次数为。当word1[i - 1] 与 word2[j - 1]相同的时候,

2023-09-19 20:22:17 246

原创 代码随想录算法训练营day55|392.判断子序列 |115.不同的子序列

t[j - 1]),此时相当于t要删除元素,t如果把当前元素t[j - 1]删除,那么。][j]表示以下标i-1为结尾的字符串s和以下标j-1为结尾的字符串t 相同子序列的长度,所以如果。表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为。与 字符串s的长度相同说明:s与t的最长相同子序列就是s,那么s 就是 t 的子序列。一定都是1,因为也就是把以i-1为结尾的s,删除所有元素,出现空字符串的个数就是1。:以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为。

2023-09-19 19:49:31 109

原创 代码随想录算法训练营day53|1143.最长公共子序列|1035.不相交的线|53. 最大子序和

而是dp[6]。在回顾一下dp[i]的定义:包括下标i之前的最大连续子序列和为dp[i]。那么我们要找最大的连续子序列,就应该找每一个i为终点的连续最大子序列。

2023-09-19 18:16:17 495

原创 代码随想录算法训练营day52|300.最长递增子序列 |674. 最长连续递增序列 |718. 最长重复子数组

连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], …, nums[r - 1], nums[r]] 就是连续递增子序列。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。每一个i,对应的dp[i](即最长递增子序列)起始大小至少都是1.

2023-09-19 16:33:17 141

原创 代码随想录算法训练营day50|123.买卖股票的最佳时机III|188.买卖股票的最佳时机IV

现在最大的时候一定是卖出的状态,而两次卖出的状态现金最大一定是最后一次卖出。给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格。给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。中 i表示第i天,j为 [0 - 2K+1] 个状态,中 i表示第i天,j为 [0 - 4] 五个状态,第0天做第一次卖出,当天买入,当天卖出,所以。第0天做第一次卖出,当天买入,当天卖出,所以。表示第i天状态j所剩最大现金。第0天做第一次买入的操作,

2023-09-13 10:10:58 197

原创 代码随想录算法训练营day49|121. 买卖股票的最佳时机 |122.买卖股票的最佳时机II

解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。因为股票就买卖一次,那么贪心的想法很自然就是取最左最小值,取最右最大值,那么得到的差值就是最大利润。表示第0天持有股票,此时的持有股票就一定是买入股票了,因为不可能有前一天推出来,所以。表示第0天持有股票,此时的持有股票就一定是买入股票了,因为不可能有前一天推出来,所以。

2023-09-12 10:50:25 172

原创 代码随想录算法训练营day48|打家劫舍 |198.打家劫舍|213.打家劫舍II|337.打家劫舍 III

力扣题目链接你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。提示:0 <= nums.length <= 1000 <= num

2023-09-11 09:44:42 252

原创 代码随想录算法训练营day46|139.单词拆分|多重背包基础理论| 背包总结

动态规划五部曲确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组确定递推公式问能否能装满背包(或者最多装多少):dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);动态规划:416.分割等和子集动态规划:1049.最后一块石头的重量 II动态规划:494.目标和动态规划:518. 零钱兑换 II动态规划:377.组合总和Ⅳ动态规划:70. 爬楼梯进阶版(完全背包)

2023-09-09 12:20:47 286

原创 代码随想录算法训练营day45|70. 爬楼梯(进阶版)|322. 零钱兑换|279.完全平方数

例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。问题:给你一个整数 n ,返回和为 n 的完全平方数的 最少数量。首先凑足总金额为0所需钱币的个数一定是0,那么dp[0] = 0;首先凑足总金额为0所需钱币的个数一定是0,那么dp[0] = 0;给你一个整数 n ,返回和为 n 的完全平方数的 最少数量。考虑到递推公式的特性,dp[j]必须初始化为一个最大的数,考虑到递推公式的特性,dp[j]必须初始化为一个最大的数,dp[j]: 和为j时,完全平方数最少的数量为dp[j]

2023-09-08 10:53:34 262

原创 代码随想录算法训练营day44|完全背包 |518.零钱兑换II|377. 组合总和 Ⅳ

所有可能的组合为: (1, 1, 1, 1) (1, 1, 2) (1, 2, 1) (1, 3) (2, 1, 1) (2, 2) (3, 1)看了这两个图,大家就会理解,完全背包中,两个for循环的先后循序,都不影响计算dp[j]所需要的值(这个值就是下标j之前所对应的dp[j])。dp[i](考虑nums[j])可以由 dp[i - nums[j]](不考虑nums[j]) 推导出来。dp[j] 就是所有的dp[j - coins[i]](考虑coins[i]的情况)相加。

2023-09-07 10:40:33 211

原创 代码随想录算法训练营day43| 1049.最后一块石头的重量II |494.目标和 | 74.一和零

力扣题目链接题目难度:中等有一堆石头,每块石头的重量都是正整数。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块石头。返回此石头最小的可能重量。如果没有石头剩下,就返回 0。输入:[2,7,4,1,8,1]输出:1。

2023-09-06 14:00:33 68

原创 代码随想录算法训练营day42 | 动态规划 背包问题 01背包 二维数组一维数组 |416. 分割等和子集

以上的讲解可以开发一道面试题目(毕竟力扣上没原题)。就是本文中的题目,要求先实现一个纯二维的01背包,如果写出来了,然后再问为什么两个for循环的嵌套顺序这么写?反过来写行不行?再讲一讲初始化的逻辑。然后要求实现一个一维数组的01背包,最后再问,一维数组的01背包,两个for循环的顺序反过来写行不行?为什么?注意以上问题都是在候选人把代码写出来的情况下才问的。就是纯01背包的题目,都不用考01背包应用类的题目就可以看出候选人对算法的理解程度了。相信大家读完这篇文章,应该对以上问题都有了答案!

2023-09-05 14:35:02 201

原创 代码随想录算法训练营day41|343. 整数拆分|96.不同的二叉搜索树

那么从1遍历j,比较(i - j) * j和dp[i - j] * j 取最大的。从递归公式上来讲,dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量] 中以j为头结点左子树节点数量为0,也需要dp[以j为头结点左子树节点数量] = 1, 否则乘法的结果就都变成0了。j的结束条件是 j < i - 1 ,其实 j < i 也是可以的,不过可以节省一步,例如让j = i - 1,的话,其实在 j = 1的时候,这一步就已经拆出来了,重复计算,所以 j < i - 1。

2023-09-04 10:54:16 118

原创 代码随想录算法训练营day39|62.不同路径 |63.不同路径 II

但如果(i, 0) 这条边有了障碍之后,障碍之后(包括障碍)都是走不到的位置了,所以障碍之后的。dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。机器人从(0 , 0) 位置出发,到(m - 1, n - 1)终点。一定都是1,因为从(0, 0)的位置到(i, 0)的路径只有一条,那么。表示啥,是从(0, 0)的位置到(i - 1, j)有几条路径,因为从(0, 0)的位置到(i, 0)的路径只有一条,所以。:表示从(0 ,0)出发,到(i, j) 有。

2023-09-02 18:24:03 668

原创 【补】代码随想录算法训练营day38|动态规划 |509. 斐波那契数|70. 爬楼梯|746. 使用最小花费爬楼梯

然后再写代码,如果代码没通过就打印dp数组,看看是不是和自己预先推导的哪里不一样。如果打印出来和自己预先模拟推导是一样的,那么就是自己的递归公式、初始化或者遍历顺序有问题了。如果和自己预先模拟推导的不一样,那么就是代码实现细节有问题。

2023-09-02 17:39:37 314

原创 代码随想录算法训练营day37| 738.单调递增的数字 |968.监控二叉树

例如:98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]–,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数。这么说有点抽象,举个例子,数字:332,从前向后遍历的话,那么就把变成了329,此时2又小于了第一位的3了,真正的结果应该是299。此时需要状态转移的公式,大家不要和动态的状态转移公式混到一起,本题状态转移没有择优的过程,就是单纯的状态转移!解释:需要至少两个摄像头来监视树的所有节点。

2023-08-31 09:35:34 152

原创 代码随想录算法训练营day36|435. 无重叠区间 |763.划分字母区间 |56. 合并区间

此时问题就是要求非交叉区间的最大个数。和射气球差不多。

2023-08-30 09:21:43 125

原创 代码随想录算法训练营day35|860.柠檬水找零 |406.根据身高重建队列 |452. 用最少数量的箭引爆气球

局部最优可推出全局最优,找不出反例,那就试试贪心。回归本题,整个插入过程如下:排序完的people: [[7,0], [7,1], [6,1], [5,0], [5,2],[4,4]]

2023-08-29 22:00:19 129

原创 代码随想录算法训练营day34| 1005.K次取反后最大化的数组和|134. 加油站|135. 分发糖果

如果 ratings[i] > ratings[i + 1],此时candyVec[i](第i个小孩的糖果数量)就有两个选择了,一个是candyVec[i + 1] + 1(从右边这个加1得到的糖果数量),一个是candyVec[i](之前比较右孩子大于左孩子得到的糖果数量)。i从0开始累加rest[i],和记为curSum,一旦curSum小于零,说明[0, i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到i这里都会断油,那么起始位置从i+1算起,再从0计算curSum。

2023-08-28 13:31:47 107

原创 代码随想录算法训练营day32| 122买卖股票的最佳时机Ⅱ | 55 跳跃游戏 | 45 跳跃游戏Ⅱ

局部最优推出全局最优,找不出反例,试试贪心!如图:i 每次移动只能在 cover 的范围内移动,每移动一个元素,cover 得到该元素数值(新的覆盖范围)的补充,让 i 继续移动下去。而 cover 每次只取 max(该元素数值补充后的范围, cover 本身范围)。如果 cover 大于等于了终点下标,直接 return true 就可以了。

2023-08-26 12:09:36 76

原创 代码随想录算法训练营day31|贪心算法 455分发饼干 376摆动序列 53 最大子序和

例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。在计算是否有峰值的时候,大家知道遍历的下标 i ,计算 prediff(nums[i] - nums[i-1]) 和 curdiff(nums[i+1] - nums[i]),如果。给定一个整数序列,返回作为摆动序列的最长子序列的长度。

2023-08-25 21:12:49 77

原创 代码随想录算法训练营day30 | 这天的题要重学 只写出一个N皇后

递归的下一层的棋盘一定比上一层的棋盘多一个数,等数填满了棋盘自然就终止(填满当然好了,说明找到结果了),所以不需要终止条件!递归深度就是row控制棋盘的行,每一层里for循环的col控制棋盘的列,一行一列,确定了放置皇后的位置。因为在单层搜索的过程中,每一层递归,只会选for循环(也就是同一行)里的一个元素,所以不用去重了。从图中,可以看出,二维矩阵中矩阵的高就是这棵树的高度,矩阵的宽就是树形结构中每一个节点的宽度。确定完约束条件,来看看究竟要怎么去搜索皇后们的位置,其实搜索皇后的位置,可以抽象为一棵树。

2023-08-24 10:32:39 45

原创 代码随想录算法训练营day29| 491 递增子序列 | 46 全排列 | 47 全排列Ⅱ

每层都是从0开始搜索而不是startIndex需要used数组记录path里都放了哪些元素了排列问题是回溯算法解决的经典题目,大家可以好好体会体会。

2023-08-23 10:59:34 88

原创 代码随想录算法训练营day28|复原ip地址 78子集 9子集Ⅱ

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k7TkaEep-1692681579101)(https://code-thinking.cdn.bcebos.com/pics/78.%E5%AD%90%E9%9B%86.png)]输出: [ [2], [1], [1,2,2], [2,2], [1,2], [] ]给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

2023-08-22 13:20:41 49

原创 代码随想录算法训练营day27| 39 组合总和 40组合总和II 131分割字符串

在处理组合问题的时候,递归参数需要传入startIndex,表示下一轮递归遍历的起始位置,这个startIndex就是切割线。所以终止条件代码如下。

2023-08-22 11:36:23 29

原创 代码随想录算法训练营day25|216 组合总和III 17电话号码的字母组合

图中可以看出遍历的深度,就是输入"23"的长度,而叶子节点就是我们要收集的结果,输出[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]。例如 k = 2,n = 4的话,就是在集合[1,2,3,4,5,6,7,8,9]中求 k(个数) = 2, n(和) = 4的组合。示例 2: 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]从上面树形结构中,可以看出,结果其实就是一条根节点到叶子节点的路径。

2023-08-20 13:41:39 106

原创 代码随想录算法训练营day24|回溯算法基础 模板|77 组合

回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归就会有回溯。所以以下讲解中,回溯函数也就是递归函数,指的都是一个函数。本篇我们讲解了,什么是回溯算法,知道了回溯和递归是相辅相成的。接着提到了回溯法的效率,回溯法其实就是暴力查找,并不是什么高效的算法。然后列出了回溯法可以解决几类问题,可以看出每一类问题都不简单。最后我们讲到回溯法解决的问题都可以抽象为树形结构(N叉树),并给出了回溯法的模板。

2023-08-18 10:08:41 133

原创 代码随想录算法训练营day23|二叉树完结 |669修剪二叉搜索树 |108将有序数组转换为二叉搜索树 |把二叉搜索树转换为累加树

力扣题目链接给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。然而[1, 3]区间在二叉搜索树的中可不是单纯的节点3和左孩子节点0就决定的,还要考虑节点0的右子树。我们在重新关注一下第二个示例,如图:从图中可以看出需要重构二叉树,想想是不是本题就有点复杂了。其实不用重构那么复杂。在上图中我们发现节点0并不符合区间要求,那么将节点0的右孩子 节点2 直接赋给 节

2023-08-17 11:20:10 92 1

原创 代码随想录算法训练营day22|235二叉搜索树的最近公共祖先 |701 二叉搜索树中的插入操作 |450 删除二叉搜索树中的节点

首先在二叉搜索树中的插入操作,大家不用恐惧其重构搜索树,其实根本不用重构。然后在递归中,我们重点讲了如何通过递归函数的返回值完成新加入节点和其父节点的赋值操作,并强调了搜索树的有序性。最后依然给出了迭代的方法,迭代的方法就需要记录当前遍历节点的父节点了,这个和没有返回值的递归函数实现的代码逻辑是一样的。

2023-08-16 10:04:28 143 1

原创 代码随想录算法训练营day21| 530二叉搜索树的最小绝对差 501二叉搜索树中的众数 236二叉树的最近公共祖先

这道题目刷过的同学未必真正了解这里面回溯的过程,以及结果是如何一层一层传上去的。那么我给大家归纳如下三点求最小公共祖先,需要从底向上遍历,那么二叉树,只能通过后序遍历(即:回溯)实现从底向上的遍历方式。在回溯的过程中,必然要遍历整棵二叉树,即使已经找到结果了,依然要把其他节点遍历完,因为要使用递归函数的返回值(也就是代码中的left和right)做逻辑判断。要理解如果返回值left为空,right不为空为什么要返回right,为什么可以用返回right传给上一层结果。

2023-08-15 10:54:16 101 1

原创 代码随想录算法训练营day20|654最大二叉树|617 合并二叉树|700 二叉搜索树中的搜索 |98 验证二叉搜索树

因为是传入了两个树,那么就有两个树遍历的节点,如果root1 == NULL 了,两个树合并就应该是root2了(如果root2也为NULL也无所谓,合并之后就是NULL)。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。单层递归的逻辑就比较好写了,这里我们重复利用一下root1这个树,root1就是合并之后树的根节点(就是修改了原来树的结构)。给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。

2023-08-14 11:04:53 49

原创 代码随想录算法训练营day18|513找树左下角的值 |112 113路径之和| 106 105

而本题我们要找一条符合条件的路径,所以递归函数需要返回值,及时返回,那么返回类型是什么呢?如图所示:图中可以看出,遍历的路线,并不要遍历整棵树,所以递归函数需要返回值,可以用bool类型表示。

2023-08-12 14:31:38 73 1

原创 代码随想录算法训练营day17|110 平衡二叉树| 257二叉树的所有路径| 404左叶子之和

关于根节点的深度究竟是1 还是 0,不同的地方有不一样的标准,leetcode的题目中都是以节点为一度,即根节点深度是1。当遇到左叶子节点的时候,记录数值,然后通过递归求取左子树左叶子之和,和 右子树左叶子之和,相加便是整个树的左叶子之和。分别求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1,表示已经不是二叉平衡树了。判断一个树的左叶子节点之和,那么一定要传入树的根节点,递归函数的返回值为数值之和,所以为int。给定一个二叉树,返回所有从根节点到叶子节点的路径。

2023-08-11 10:04:41 89 1

原创 1代码随想录算法训练营day16|二叉树递归思想 104 559 111 |022完全二叉树的节点个数

使用迭代法的话,使用层序遍历是最为合适的,因为最大的深度就是二叉树的层数,和层序遍历的方式极其吻合。先求它的左子树的深度,再求右子树的深度,最后取左右深度最大的数值 再+1 (加1是因为算上当前中间节点)就是目前节点为根节点的树的深度。先求它的左子树的节点数量,再求右子树的节点数量,最后取总和再加一 (加1是因为算上当前中间节点)就是目前节点为根节点的节点数量。先求它的左子树的节点数量,再求右子树的节点数量,最后取总和再加一 (加1是因为算上当前中间节点)就是目前节点为根节点的节点数量。

2023-08-10 10:16:21 40 1

空空如也

空空如也

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

TA关注的人

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