自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 安装anaconda在cmd中找不到安装版本

anaconda安装成功验证

2025-03-08 10:36:50 1070

原创 代码随想录算法训练营总结

对与我自身的收获还是不错的,虽然在回溯、二叉树、动规、图论、贪心这些较后面的模块学的不是太好,有些都没能理解透,只能对着题解手敲代码进行完成,但是坚持到了最后,就是胜利!这个训练营算是我第一次比较系统的进行学习数据结构和算法以及刷力扣,以前总是刷到一半就半途而费了,这次总算是坚持着跟着群里的打卡节奏一步一步的完结了。最后,给坚持到最后的自己,鼓掌👏👏👏👏👏👏👏,撒花*★,°*:.☆( ̄▽ ̄)/$:*.°★*。为期2个月的训练营时间,总算是一步一步的顺利结束了,撒花撒花!

2025-01-14 09:57:12 353

原创 代码随想录算法训练营第六十二天|KM97.小明逛公园|KM127.骑士的攻击|最短路径总结|图论总结

1、四大最短路算法,分别是Dijkstra、Bellman_ford、SPFA 和 Floyd;1、两种图的存储方式,邻接表和邻接矩阵;搜索方式:深搜是可一个方向搜,不到黄河不回头。广搜是围绕这起点一圈一圈的去搜。代码模板:需要熟练掌握深搜和广搜的基本写法。应用场景:图论题目基本上可以即用深搜也可用广搜,无疑是用哪个方便而已3、并查集 :了解并查集能解决哪些问题,写法以及路径压缩和时间复杂度;4、最小生成树。

2025-01-13 08:39:05 1277

原创 代码随想录算法训练营第六十天|KM94.城市间货物运输Ⅰ|KM95.城市间货物运输Ⅱ|KM96.城市间货物运输Ⅲ

如果在这样的图中求最短路的话, 就会在这个环里无限循环 (也是负数+负数 只会越来越小),无法求出最短路径。(有负权回路的情况下,一直都会有更短的最短路,所以 松弛 第n次,minDist数组 也会发生改变。SPFA是对Bellman_ford算法的优化,由于Bellman_ford 算法 每次都是对所有边进行松弛,其实是多做了一些无用功。其实只需要对 上一次松弛的时候更新过的节点作为出发节点所连接的边 进行松弛就够了。本题是要我们判断 负权回路,也就是图中出现环且环上的边总权值为负数。

2025-01-11 00:13:32 672

原创 代码随想录算法训练营第五十九天|KM47.参加科学大会|KM94.城市间货物运输Ⅰ

的邻接表 使用 数组 + 链表的方式来表示。邻接表是从边的数量来表示图,有多少边 才会申请对应大小的链表。的通过边的角度出发解决,直接把 边(带权值)加入到 小顶堆(利用堆来自动排序),那么每次我们从 堆顶里 取出 边 自然就是 距离源点最近的节点所在的边。

2025-01-10 08:42:05 724

原创 代码随想录算法训练营第五十八天|KM117.软件构建|KM47.参加科学大会

发现结果集元素个数 不等于 图中节点个数,我们就可以认定图中一定有 有向环!大学排课,先上A课,才能上B课,上了B课才能上C课,上了A课才能上D课,等等一系列这样的依赖顺序;本题,根据题意画出路线,其实就是求最短路径,从起点到终点的有向图;第三步,更新非访问节点到源点的距离(即更新minDist数组);在有权图(权值非负数)中求从起点到其他节点的最短路径算法。1、找到入度为0的节点,加入结果集。第一步,选源点到哪个节点近且该节点未被访问过;循环以上两步,直到所有节点都在图中被移除;2、将该节点从图中移除。

2025-01-09 08:42:33 506

原创 代码随想录算法训练营第五十七天|KM53.寻宝

②如果边首尾的两个节点不在同一个集合,加入到最小生成树,并把两个节点加入同一个集合;2、从个人理解上,从节点比较容易理解一点;从边的角度上考虑还需要考虑边的两个节点是否在一个集合中;①如果边首尾的两个节点在同一个集合,说明如果连上这条边图中会出现环;第三步,更新非生成树节点到生成树的距离(即更新minDist数组)是所有节点的最小连通子图,即:以最小的成本(边的权值)将图中所有节点链接到一起。1、prim主要从节点出发,kruskal从边的角度出发;1、边的权值排序,因为要优先选最小的边加入到生成树里;

2025-01-08 08:47:31 456

原创 代码随想录算法训练营第五十六天|KM108.冗余连接|KM109.冗余连接Ⅱ

如果是有向树的话,只有根节点入度为0,其他节点入度都为1(因为该树除了根节点之外的每一个节点都有且只有一个父节点,而根节点没有父节点);大概就是加一条边使树结构有环,然后再环中去掉一条边(如果环中多条边可取,则去掉最后一条边),仍然变成一颗树结构;入度为2 的一种情况下只能删特定的一条边,如下图所示;该情况只能删除这条边(节点1 -> 节点3)如果没有入度为2的点,说明 图中有环了(注意是有向环),对于这种情况,删除构成环的边就可以了;如果我们找到入度为2的点,那么删一条指向该节点的边就行了;

2025-01-07 13:54:35 464

原创 代码随想录算法训练营第五十五天|并查集理论基础|KM107.寻找存在的路径

我们将三个元素A,B,C (分别是数字)放在同一个集合,其实就是将三个元素连通在一起,如何连通呢。我们的目的是判断这三个元素是否在同一个集合里,知道 A 连通 B 就已经足够了。这样就表述 A 与 B 与 C连通了(有向连通图)。2、判断两个元素在不在同一个集合;1、将两个元素添加到一个集合中;

2025-01-06 14:45:32 337

原创 代码随想录算法训练营第五十三天|KM110.字符串接龙|KM105.有向图的完全可达性|KM106.岛屿的周长

题目中并没有给出点与点之间的连线,而是要我们自己去连,条件是字符只能差一个;所以判断点与点之间的关系,需要判断是不是差一个字符,。最后就是求起点和终点的最短路径长度,。因为广搜就是以起点中心向四周扩散的搜索;本题是一个无向图,需要用标记位,标记着节点是否走过,否则就会死循环!使用set来检查字符串是否出现在字符串集合里更快一些;,在有向图中,即使所有节点都是链接的,但依然不可能从0出发遍历所有边。本题是一个。只能用深搜(DFS)或者广搜(BFS)来搜。本题在pycharm中运行长时间不出结果;

2025-01-06 14:05:30 388

原创 代码随想录算法训练营第五十二天|KM101.孤岛的总面积|KM102.沉没孤岛|KM103.水流问题|KM104.建造最大岛屿

第二步:再遍历地图,遍历0的方格(因为要将0变成1),并统计该1(由0变成的1)周边岛屿面积,将其相邻面积相加在一起,遍历所有 0 之后,就可以得出 选一个0变成1 之后的最大面积。从地图周边出发,将周边空格相邻的陆地都做上标记,然后在遍历一遍地图,遇到 陆地 且没做过标记的,那么都是地图中间的 陆地 ,全部改成水域就行。步骤一:深搜或者广搜将地图周边的 1 (陆地)全部改成 2 (特殊标记)思路:遍历地图尝试 将每一个 0 改成1,然后去搜索地图中的最大的岛屿面积;本题没有理解,暂时放一放;

2025-01-03 17:12:42 579

原创 代码随想录算法训练营第五十一天|KM99.岛屿数量(深度搜索版)|KM99.岛屿数量(广度搜索版)|KM100.岛屿的最大面积

本题是 dfs,bfs基础类题目,就是搜索每个岛屿上“1”的数量,然后取一个最大的。用广搜做这道题目的时候存在超时,可能忽略其中一个重要细节,根本原因在于。

2025-01-02 17:00:58 524

原创 代码随想录算法训练营第五十天|图论基础|深度优先搜索理论基础|KM98.所有可达路径|广度优先搜索理论基础

1、图的基本概念二维坐标中,两点可以连成线,多个点连成的线就构成了图。当然图也可以就一个节点,甚至没有节点(空图)2、图的种类整体上一般分为和;有向图是指图中边是有方向的;无向图是指 图中边没有方向;加权有向图,就是图中边是有权值的;3、度无向图中有几条边连接该节点,该节点就有几度。在有向图中,每个节点有出度和入度。出度:从该节点出发的边的个数。入度:指向该节点边的个数。4、强连通图强连通图是在有向图中5、连通分量。

2024-12-31 23:33:45 2043

原创 代码随想录算法训练营第四十九天|LC42.接雨水|LC84.柱状图中最大的矩形

使用暴力解法双循环和上题LC42一样,提交会超时,所以直接使用双指针法;本题为困难题,有3种方法,暴力解法,双指针优化和单调栈;取其中简单理解的弄懂即可;思路和暴力法差不多;都是找两边的最大柱子,然后求和;首先要明确,是要按照行来计算还是按照列来计算;但是提交超出时间限制;

2024-12-31 10:10:02 533

原创 代码随想录算法训练营第四十八天|LC739.每日温度|LC496.下一个最大元素Ⅰ|LC503.下一个最大元素Ⅱ

首先想到双重循环进行遍历,两者索引相减就是几天内出现的最高温情况但是提交会发现超出时间限制;使用单调栈进行解题:什么时候用单调栈?或者说什么样的情况能够联想到使用单调栈呢?。时间复杂度为O(n)。,因为在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是整个数组只需要遍历一次。

2024-12-30 15:57:09 456

原创 代码随想录算法训练营第四十六天|LC647.回文子串|LC516.最长回文子序列|动态规划总结

动规五部曲确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组要清楚每一个步骤所代表的含义和意义,才能真正明白动态规划的题目,光想递推公式,就算解题了也是稀里糊涂的,没有真正了解全貌;

2024-12-28 23:31:34 1096

原创 代码随想录算法训练营第四十五天|LC115.不同的子序列|LC583.两个字符串的删除操作|LC72.编辑距离|编辑距离总结

1、确定递推公式的时候,首先要搞清楚编辑的几种操作,针对不同进行进行分析递推公式;2、要理解清楚正确的dp[j][j]的含义;3、对于删除增加的关系,要善于变通,如(word2添加一个元素,相当于word1删除一个元素),需要转换思路进行理解;

2024-12-27 14:03:46 1021

原创 代码随想录算法训练营第四十四天|LC1143.最长公共子序列|LC1035.不相交的线|LC53.最大子数组和|LC392.判断子序列

t[j - 1]),此时相当于t要删除元素,t如果把当前元素t[j - 1]删除,那么dp[i][j] 的数值就是 看s[i - 1]与 t[j - 2]的比较结果了,即:dp[i][j] = dp[i][j - 1]dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j]if (s[i - 1] == t[j - 1]),那么dp[i][j] = dp[i - 1][j - 1] + 1;4、举例推导dp数组。

2024-12-26 14:43:29 535

原创 代码随想录算法训练营第四十三天|LC300.最长递增子序列|LC674.最长连续递增序列|LC718.最长重复子数组

1、dp[i]的定义2、状态转移方程3、初始化每一个i,对应的dp[i](即最长递增子序列)起始大小至少都是1;4、举例推导。

2024-12-26 11:20:36 462

原创 代码随想录算法训练营第四十二天|LC188.买卖股票的最佳时机Ⅳ|LC309.买卖股票的最佳时机含冷冻期|LC714.买卖股票的最佳时机含手续费|股票总结

思路:至多有K次交易309. 买卖股票的最佳时机含冷冻期 - 力扣(LeetCode) 思路:冷冻期即当天不能操作股票①确定dp数组以及下标的含义 dp[i][j],第i天状态为j,所剩的最多现金为dp[i][j];具体可以区分出如下四个状态:②确定递推公式③dp数组如何初始化 dp[0][0] = -prices[0];dp[0][2]初始化为0,dp[0][3]也初始为0④确定遍历顺序 从前向后遍历⑤举例推导dp数组714. 买卖股票的最佳时

2024-12-25 21:31:20 509

原创 代码随想录算法训练营第四十一天|LC121.买卖股票的最佳时机|LC122.买卖股票的最佳时机Ⅱ|LC123.买卖股票的最佳时机Ⅲ

dp[i][0]应该选所得现金最大的,所以dp[i][0] = max(dp[i - 1][0], -prices[i]);dp[i][j]中 i表示第i天,j为 [0 - 4] 五个状态,dp[i][j]表示第i天状态j所剩最大现金。思路:本题相对LC121和LC122对比,区别在于可以买卖一次,可以买卖2次,也可以不买卖;所以dp[0][0] -= prices[0];dp[i][0] 表示第i天持有股票所得最多现金。①确定dp数组以及下标的含义。③dp数组如何初始化。

2024-12-25 17:18:17 601

原创 代码随想录算法训练营第三十九天|LC198.打家劫舍|LC213.打家劫舍Ⅱ|LC337.打家劫舍Ⅲ

如果偷第i房间,那么dp[i] = dp[i - 2] + nums[i],如果不偷第i房间,那么dp[i] = dp[i - 1];dp[i]的定义上来讲,dp[0] 一定是 nums[0],dp[1]就是nums[0]和nums[1]的最大值。dp[i] 是根据dp[i - 2] 和 dp[i - 1] 推导出来的,那么一定是从前到后遍历!所以dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);2、考虑包含首元素,不包含尾元素;3、考虑包含尾元素,不包含首元素;

2024-12-21 23:46:10 454

原创 代码随想录算法训练营第三十八天|LC322.零钱兑换|LC279.完全平方数|LC139.单词拆分|多重背包理论|背包问题总结

一维dp数组的背包在遍历顺序上和二维dp数组实现的01背包其实是有很大差异的,需要注意;2、完全背包:如果求组合数就是外层for循环遍历物品,内层for遍历背包;如果求排列数就是外层for遍历背包,内层for循环遍历物品。

2024-12-20 10:03:47 909

原创 代码随想录算法训练营第三十七天|完全背包理论|LC518.零钱兑换Ⅱ|LC377.组合总和Ⅱ|卡码网57.爬楼梯

1、,求解将哪些物品装入背包里物品价值总和最大;2、3、内嵌的循环是遍历,为了保证;4、的物品是可以的,所以要去遍历;①确定dp数组以及下标的含义dp[j]:凑成总金额j的货币组合数为dp[j];②确定递推公式dp[j] 就是所有的dp[j - coins[i]](考虑coins[i]的情况)相加。所以递推公式:dp[j] += dp[j - coins[i]];③dp数组如何初始化首先dp[0]一定要为1,dp[0] = 1是 递归公式的基础。

2024-12-19 18:49:21 679

原创 代码随想录算法训练营第三十六天|LC1049.最后一块石头的重量Ⅱ|LC494.目标和|LC474.一和零

①确定dp数组以及下标的含义。②确定递推公式01背包的递推公式为:dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);③dp数组如何初始化既然 dp[j]中的j表示容量,那么最大容量(重量)是多少呢,就是所有石头的重量和。因为提示中给出1 <= stones.length <= 30,1 <= stones[i] <= 1000,所以最大重量就是30 * 1000,而我们要求的target其实只是最大重量的一半,所以dp数组开到15000大小就可以了。

2024-12-18 15:18:34 992

原创 代码随想录算法训练营第三十五天|01背包理论基础|卡码网46.携带研究材料|LC416.分割等和子集

对于面试来讲,其实掌握01背包和完全背包已经完全够用了;而完全背包也是01背包稍作变化而来的,所以,一定要理解透彻;01背包将背包容量、价值填写在二维表格中,进行动态规划的思路,便于理解,dp[i][j];

2024-12-17 10:54:06 1188

原创 代码随想录算法训练营第三十四天|LC62.不同路径|LC63.不同路径Ⅱ

像要求dp[i][j],只能有两个方向来推导出来,即dp[i - 1][j] 和 dp[i][j - 1];从递归公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1] 中可以看出,一定是从左到右一层一层遍历,这样保证推导dp[i][j]的时候,dp[i - 1][j] 和 dp[i][j - 1]一定是有数值。递推公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1],dp[i][j]都是从其上方和左方推导而来,那么从左到右一层一层遍历就可以了。

2024-12-16 13:34:30 481

原创 代码随想录算法训练营第三十二天|动态规划理论基础|LC509.肥波那些数|LC70.爬楼梯|LC746.使用最小花费爬楼梯

按照这个递推公式dp[i] = dp[i - 1] + dp[i - 2],我们来推导一下,当N为10的时候,dp数组应该是如下的数列:0 1 1 2 3 5 8 13 21 34 55,如果代码写出来,发现结果不对,就把dp数组打印出来看看和我们推导的数列是不是一致的;按照这个递推公式dp[i] = dp[i - 1] + dp[i - 2],我们来推导一下,当N为5时,的时候,dp数组应该是如下的数列:1,2,3,5,8;一定是选最小的,所以。dp[i]的定义为: 爬到第i层楼梯,有dp[i]种方法。

2024-12-14 20:13:06 2262

原创 代码随想录算法训练营第三十一天|LC56.合并区间|LC738.单调递增的数字|贪心算法总结

1、贪心自我感觉就是先找出一个步骤,该步骤为局部最优,然后一步步发展,将结尾为全局最优的情况;2、有的时候贪心的解法和平时的常识一般,有时候又很巧妙,个人觉得优先找出一个局部优解,然后类似递归的方式进行一步步深入,从而达到全局优解;

2024-12-13 10:38:17 317

原创 代码随想录算法训练营第三十天|LC452.用最少数量的箭引爆气球|LC435.无重叠区间|LC763.划分字母区间

2、从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点;让尽可能多的气球重叠,则可以减少箭的数量;即让一支箭尽可能多的射穿气球;如何把同一个字母的都圈在同一个区间里呢?1、统计每一个字符最后出现的位置;此时前面出现过所有字母,最远也就到这个边界了。在遍历的过程中相当于是要找每一个字母的边界,需要对数组进行排序;

2024-12-12 14:02:13 337

原创 代码随想录算法训练营第二十九天|LC134.加油站|LC135.分发水果|LC860.柠檬水找零|LC406.根据身高重建队列

当在区间【0,i】期间,若rest【i】= gas[i] - cost[i],i从0开始累加rest[i],和记为curSum,一旦curSum小于零,说明[0, i]区间都不能作为起始位置;rest[i] = gas[i]-cost[i]为一天剩下的油,i从0开始计算累加到最后一站,如果累加没有出现负数,说明从0出发,油就没有断过,那么0就是起点。找零钱,明白5元是更万能的,可以给10元找零钱,也可以给20元找零钱,所以当遇到20元的时候,优先将10元进行使用,即找零10元+5元;

2024-12-12 11:07:36 631

原创 代码随想录算法训练营第二十八天|LC122.买卖股票的最佳时机Ⅱ|LC55.跳跃游戏|LC45.跳跃游戏Ⅱ|LC1005.K次取反后最大化的数组和

思路:一股脑想到选一个最低的买入,再选一个最高的卖出;但是贪心算法,考虑倒最终利润是可以分解的,那么本题就是选一个,再选一个低的买入.....。

2024-12-10 15:49:28 725

原创 代码随想录算法训练营第二十七天|贪心理论基础|LC455.分发饼干|LC376.摆动序列|LC53.最大子数组合

唯一的难点就是如何通过局部最优,推出整体最优。贪心算法一般分为如下四步:1、将问题分解为若干子问题;2、找出适合的贪心策略;3、求解每一个子问题的最优解;4、将局部最优解堆叠成全局最优解;思路:1、大尺寸的饼干既可以满足胃口大的孩子也可以满足胃口小的孩子,那么就应该优先满足胃口大的。2、。3、使用贪心策略,先将饼干数组和小孩数组排序。然后从后向前遍历小孩数组,用大饼干优先满足胃口大的,并统计满足小孩数量。

2024-12-09 18:33:04 602

原创 代码随想录算法训练营第二十五天|LC491.非递减子序列|LC46.全排列|LC47.全排列Ⅱ|回溯总结

1、回溯是递归的副产品,只要有递归就会有回溯,所以回溯法也经常和二叉树遍历,深度优先搜索混在一起,因为这两种方式都是用了递归。2、回溯法就是暴力搜索,并不是什么高效的算法,最多再剪枝一下;(减枝一般在循环的地方进行)3、回溯不好理解的话可以将遍历过程抽象为树形结构方便理解;4、回溯模板void backtracking(参数) {if (终止条件) {存放结果;return;for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;

2024-12-07 23:35:19 513

原创 代码随想录算法训练营第二十四天|LC93.复原IP地址|LC78.子集|LC90.子集Ⅱ

去重就是对重复的数值进行少一个遍历的情况,如果重复遍历得到的结果还是和上一次遍历结果一致,少一次遍历可以减少一次遍历的时间;从图中可以看出,同一树层上重复取2 就要过滤掉,同一树枝上就可以重复取2,因为同一树枝上元素的集合才是唯一子集!其实子集也是一种组合问题,因为它的集合是无序的,子集{1,2} 和 子集{2,1}是一样的。如果把 子集问题、组合问题、分割问题都抽象为一棵树的话,该题与上题LC78类似,但是给的整数数组。对于包含重复元素的情况,就是要做到一个。该题中给的数组中的元素。

2024-12-06 10:33:30 350

原创 代码随想录算法训练营第二十三天|LC39.组合总和|LC40.组合总和Ⅱ|LC131.分割回文串

在看到上图遍历的过程时,就已经想到,为什么要一遍遍判断累加值大于目标值的情况,若一个数值是有序的,若累加到第一个值就大于目标值的话,数组的后序数值就不需要进行累加,直接就可以return,这样不是更方便吗?本题仅有总和的限制,所以没有递归层数的限制,只要选取的元素总和超过target就返回;来完成的,一个bool型数组,用来记录同一树枝上的元素是否使用过;中的每个数字在每个组合中只能使用一次 ,我理解为使用该数字后,需要把该数字在。题目要求:可以无限制重复被选取;”是一个正读和反读都一样的字符串;

2024-12-05 08:36:36 493

原创 代码随想录算法训练营第二十二天|回溯算法理论|LC77.组合|LC216.组合总和Ⅲ|LC17.电话号码的字母组合

回溯法也可以叫做回溯搜索法,它是一种搜索的方式,回溯是递归的副产品,只要有递归就会有回溯,;回溯法解决的问题:组合问题:N个数里面按一定规则找出k个数的集合切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集排列问题:N个数按一定规则全排列,有几种排列方式棋盘问题:N皇后,解数独等等其中:组合和排列是不一样的,。因为回溯法解决的都是在集合中递归查找子集,。

2024-12-04 11:56:13 852

原创 代码随想录算法训练营第二十一天|LC669.修剪二叉搜索树|LC108.将有序数组转换为二叉搜索树|LC538.把二叉搜索树转换为累加树|二叉树总结

1、二叉树的前、中、后序遍历(主要掌握递归法);2、对二叉树深度、层数、节点、平衡等概念,需要重点掌握理解;3、对二叉树的修改与改造(比如翻转、构造新的二叉树,合并二叉树等);4、二叉搜索树的属性,搜索树的特性(节点值是一个有序数组);5、二叉搜索树的改造;

2024-12-03 10:44:29 643

原创 代码随想录算法训练营第二十天|LC235.二叉搜索树的最近公共祖先|LC701.二叉搜索树中的插入操作|LC450.删除二叉搜索树中的节点

4、左右孩子节点都不为空,则将删除节点的左子树节点(左孩子)放到删除节点的右子树的最左面节点的左孩子上,返回删除节点有孩子为新的根节点;2、搭配有序的思路,以及左子树和右子树的p,q,那么中间节点在有序数组中是处于中间,即[p,q]中间;2、删除节点的左孩子为空,右孩子不为空,删除节点,有孩子补位,返回右孩子为根节点;3、删除节点的右孩子为空,左孩子不为空,删除节点,左孩子补位,返回左孩子为根节点;1、左右孩子都为空(叶子节点),直接删除节点,返回None为根节点;1、搭配二叉搜索树,是一个有序的;

2024-12-02 16:51:55 736

原创 代码随想录算法训练营第十八天|LC530.二叉搜索树的最小绝对差|LC501.二叉搜索树中的众数 |LC 236.二叉树的最近公共祖先

本次代码可以在力扣上通过,但是在ide中运行的到-37的结果,并且我在加入abs的方式也不对,在ide的运行和力扣的结果不一样,不知道怎么回事,带后续补充;最近公共祖先:百度百科中最近公共祖先的定义为,“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的。遇到在二叉搜索树上求什么最值啊,差值之类的,就把它想成在一个有序数组上求最值,求差值,这样就简单多了。3、后序遍历(左右中)就是天然的回溯过程,可以根据左右子树的返回值,来处理中节点的逻辑。

2024-12-01 00:50:54 689

空空如也

空空如也

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

TA关注的人

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