
leetcode刷题详解
文章平均质量分 89
Musennn
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode 135.分发糖果:双向遍历下的贪心策略应用
有n个孩子站成一排,每个孩子都有一个评分ratings。每个孩子至少分配到 1 个糖果。相邻两个孩子中,评分高的孩子必须获得更多的糖果。要求返回最少需要的糖果总数。本题通过分阶段处理双向约束识别问题中的双向约束(如本题中"左高右低"和"右高左低"两种情况)分两次遍历,每次处理一个方向的约束,确保被比较方的状态已确定合并两次遍历的结果,取满足所有约束的最小值这种思路的核心是将复杂的全局约束分解为可分步处理的局部约束,通过贪心策略实现高效求解。原创 2025-08-19 16:36:34 · 816 阅读 · 0 评论 -
LeetCode 134.加油站:贪心策略下的环形路线可行性判断
在一条环路上有n个加油站,其中第i个加油站有汽油gas[i]升。你有一辆油箱容量无限的汽车,从第i个加油站开往第i+1个加油站需要消耗汽油cost[i]升。你从其中一个加油站出发,开始时油箱为空。如果可以绕环路行驶一周,则返回出发时的加油站编号;否则,返回-1。用curSum跟踪当前路段的可行性,及时重置起点用totalSum保证全局可行性利用问题的唯一性,无需验证最后找到的起点这种"局部排除+全局验证"的思路,可应用于其他环形路线或分段优化问题。原创 2025-08-19 11:14:41 · 398 阅读 · 0 评论 -
LeetCode 45.跳跃游戏II:贪心策略下的最少跳跃次数求解
给定一个非负整数数组nums,你最初位于数组的第一个下标。数组中的每个元素nums[i]表示你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个下标。假设你总能到达数组的最后一个下标。// 当前覆盖范围的边界// 下一步能到达的最大覆盖范围// 跳跃次数区分当前覆盖范围和下一步最大覆盖范围在适当的时机(到达当前范围边界)进行跳跃每次跳跃都选择能到达的最远范围这种策略确保了每一步都是最优的,从而在整体上得到最少的跳跃次数。原创 2025-08-18 15:10:57 · 308 阅读 · 0 评论 -
LeetCode 55.跳跃游戏:贪心策略下的可达性判断
给定一个非负整数数组nums,你最初位于数组的第一个下标。数组中的每个元素nums[i]表示你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。本题的贪心解法通过跟踪最大覆盖范围范围更新:在当前可达范围内,不断扩展最大覆盖范围早期终止:一旦覆盖范围包含终点,立即返回结果效率优势:线性时间复杂度,常数空间复杂度,远超暴力枚举的性能这种“覆盖范围扩展”的思路可推广到其他可达性问题(如 Jump Game II 求最少跳跃次数),是贪心算法解决范围优化类问题的典型范例。原创 2025-08-16 13:19:11 · 1063 阅读 · 0 评论 -
LeetCode 53.最大子数组和:贪心算法下的连续子数组最优解
给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。问题可分解为一系列局部决策每个局部决策的最优选择能累积成全局最优无需回溯(每个决策一旦做出就不再修改)最大子数组和问题通过简单的累加、比较、重置操作,在 linear 时间内解决,是贪心算法高效性的典型体现。掌握这种思路,可解决类似的连续序列优化问题(如最大乘积子数组等)。原创 2025-08-15 16:17:29 · 912 阅读 · 0 评论 -
LeetCode 376.摆动序列:贪心策略下的极值点筛选
摆动序列是指一个序列中,相邻元素的差值呈现正负交替的特征。若后一个差值为正,则前一个差值必为负;若后一个差值为负,则前一个差值必为正;差值为0的情况不参与交替(视为平坡,可忽略)。序列是摆动序列,差值为(正负交替);序列[1,2,3,4]不是摆动序列,差值为1,1,1(全为正,无交替)。// 当前相邻元素的差值(nums[i] - nums[i-1])// 前一个有效差值(用于判断交替)// 摆动序列长度(初始值为1,至少包含第一个元素)本题通过贪心算法聚焦于差值的方向交替。原创 2025-08-15 15:11:14 · 743 阅读 · 0 评论 -
LeetCode 37.解数独:回溯法在二维网格中的应用与剪枝策略
状态表示使用9×9的字符数组直接存储数独状态通过双重循环遍历每个待填充位置选择与约束每个位置尝试1-9的数字(选择空间)通过行、列、九宫格检查实现约束剪枝递归与回溯递归处理下一个位置,成功则快速返回失败则撤销当前选择,尝试下一个数字数独问题展示了回溯法在二维空间中的典型应用,其核心在于通过有效的约束检查减少搜索空间,以及通过布尔返回值实现解的快速发现。掌握这种模式可以解决各类网格填充和约束满足问题。原创 2025-08-14 17:51:56 · 778 阅读 · 0 评论 -
leetcode51.N皇后:回溯算法与冲突检测的核心逻辑
行优先策略:逐行处理,避免行冲突选择与撤销:合法位置放置皇后,回溯时撤销选择剪枝优化:通过合法性检查提前排除无效路径回溯框架:逐行处理,选择合法位置,递归下一行,回溯撤销选择冲突检测:高效检查列、左上对角线、右上对角线冲突解的收集:找到合法解时进行深度复制并存储理解这种解法的关键是把握回溯过程中状态的变化路径,以及如何通过冲突检测剪枝无效路径。N皇后问题是回溯算法在约束满足问题中的典型应用,这种思路可扩展到数独、八数码等其他约束满足问题。原创 2025-06-22 21:37:57 · 1073 阅读 · 0 评论 -
leetcode332.重新安排行程:优先队列与DFS实现欧拉路径的行程规划
邻接表表示:使用HashMap+PriorityQueue构建有向图字典序保证:PriorityQueue确保每次选择字典序最小的边数据结构选择:PriorityQueue保证字典序,HashMap构建邻接表遍历策略:后序DFS确保所有边被使用,反转结果得到正确顺序问题建模:将行程问题转化为图的欧拉路径问题理解这种解法的关键是把握后序遍历与反转操作的配合,以及优先队列在字典序保证中的作用。这种思路不仅适用于行程规划,还可迁移到其他图的欧拉路径问题,是图论算法在实际场景中的典型应用。原创 2025-06-21 21:28:29 · 1090 阅读 · 0 评论 -
leetcode47.全排列II:HashSet层去重与used数组枝去重的双重保障
本文详细解析了如何解决包含重复数字的全排列问题,确保生成的所有排列不重复。核心解法采用回溯算法,结合双重去重机制:通过排序预处理和HashSet实现同层去重,避免重复选择相同元素;利用used数组确保每个排列中元素不重复使用。文章通过代码实现、流程模拟和数学证明,展示了双重去重的协同工作原理,并分析了算法复杂度。最后指出常见误区,建议优化方案,强调排序预处理和正确使用HashSet的关键作用。该解法高效解决了排列生成中的重复问题,时间复杂度为O(n×n!),空间复杂度为O(n)。原创 2025-06-03 16:47:26 · 657 阅读 · 0 评论 -
leetcode46.全排列:回溯算法中元素利用的核心逻辑
从头开始遍历:每次递归都从数组第一个元素开始检查动态过滤:通过动态过滤已使用元素全局遍历策略:每次递归从头遍历所有元素,动态过滤已使用元素状态回退机制:递归返回后撤销选择,确保元素可被后续路径使用终止条件控制:当收集到完整排列时终止递归,避免无效搜索理解这种解法的关键是把握递归过程中状态的变化路径,以及如何在每个节点动态选择未使用元素。这种元素利用策略不仅适用于全排列问题,还可扩展到组合、子集等问题的变种,是回溯算法的核心技术之一。原创 2025-06-03 16:25:30 · 1166 阅读 · 0 评论 -
leetcode491.递增子序列:HashSet同层去重与递增条件的双重保障
每层新建:每层循环新建HashSet,确保同层去重跨层独立:不同层的HashSet互不影响,允许跨层选相同数字HashSet的层内唯一性:每层循环新建HashSet,确保同层不重复选数字递增条件的前向判断:当前数字与子序列最后一个数字比较,维持递增性结果收集策略:子序列长度≥2时收集,满足题目要求理解这种解法的关键是把握HashSet的作用域控制和递增条件的判断逻辑,两者共同作用确保了子序列的合法性和唯一性。这种同层去重策略在处理含重复元素的子序列问题中具有通用性,是回溯算法去重的经典实现。原创 2025-06-03 15:54:12 · 843 阅读 · 0 评论 -
leetcode90.子集II:排序与同层去重的回溯优化策略
排序预处理:将重复元素相邻排列,为去重提供条件同层重复检测:通过,避免同一层中选择重复元素异层允许策略:不同层的重复元素允许选择,保证子集的完整性理解这种去重逻辑的关键是区分同层与异层的重复元素:同层重复会导致相同子集,必须跳过;异层重复属于不同路径,允许存在。这种策略在组合、排列等含重复元素的问题中具有通用性,是回溯算法去重的经典解决方案。原创 2025-06-02 20:30:48 · 1152 阅读 · 0 评论 -
leetcode78.子集:回溯算法中结果收集时机的精准把握
全程收集:每次递归进入时收集当前子集避免遗漏:确保覆盖从空集到最大子集的所有状态全程收集策略:在每次递归进入时收集当前子集,确保覆盖所有状态元素选择控制:通过start参数避免重复选择,保证元素顺序状态回退机制:递归返回后撤销选择,维护状态一致性理解这种解法的关键是把握递归过程中状态的变化路径,以及如何在每个节点精准收集结果。这种全程收集策略不仅适用于子集问题,还可扩展到组合、排列等问题的变种,是回溯算法的核心技术之一。原创 2025-06-02 20:09:46 · 905 阅读 · 0 评论 -
leetcode93.复原IP地址:回溯算法中段控制与前导零处理的深度解析
当前段长度限制单段最大长度剩余长度预判避免无效搜索数学意义:确保剩余字符足够分成剩余段数,且每段不超过3字符段长度的双重控制:当前段长度与剩余长度预判结合,大幅减少无效搜索前导零的精准处理:在段起始位置判断,确保段格式合法状态的高效回退:通过记录长度实现状态的精准恢复理解这种解法的关键是掌握递归过程中如何通过剪枝策略减少搜索空间,以及如何高效管理字符串状态。这种段控制方法在处理类似的分段问题(如合法IP生成、字符串分割)中具有广泛的应用价值,是回溯算法在工程实践中的典型应用。原创 2025-06-02 19:37:30 · 1355 阅读 · 0 评论 -
LeetCode 131.分割回文串:回溯法与回文子串判定的结合
输入:字符串s(长度≤16)输出:所有可能的将s分割为若干个回文子串的方案示例s = "aab"状态定义使用start指针表示当前处理的起始位置使用temp列表记录当前已分割的回文子串选择逻辑枚举从start开始的所有可能子串仅当子串为回文时继续递归优化方向预处理回文状态矩阵,将判定复杂度降为O(1)合理使用StringBuilder减少字符串操作开销掌握这套框架,可解决所有字符串分割相关的组合搜索问题,核心在于递归过程中如何正确维护状态并枚举所有可能的分割点。原创 2025-06-01 19:25:25 · 811 阅读 · 0 评论 -
LeetCode 40.组合总和II:含重复元素的组合问题去重策略详解
三步核心流程排序数组使重复元素相邻回溯时用start控制元素使用范围通过跳过重复选择关键参数理解start:当前层可选择的最小索引,避免重复组合i > start:确保同一层中相同元素只处理一次i+1:递归时跳过当前元素,实现"每个元素只用一次"拓展应用子集问题(78题)去重排列问题(46题)去重组合总和III(216题)等变体掌握这套去重策略,可系统性解决所有含重复元素的组合搜索问题,核心在于理解"层内去重"与"层间允许"的逻辑差异。原创 2025-06-01 17:34:11 · 1151 阅读 · 0 评论 -
剪枝中的 `break` 与 `return` 区别详解
操作影响范围适用场景break仅终止当前层后续循环排序后剪枝后续无效值return终止整个当前函数确定后续所有分支都无效时continue跳过当前迭代继续下一个需要跳过特定值但继续尝试其他值在组合求和的剪枝中,break利用数组有序性仅跳过确定无效的后续值保留已处理分支的递归最大化减少无效计算同时保证结果完整这就是为什么我们使用break而不是return——它像精准的外科手术刀,只切除病变部位而不伤及健康组织!原创 2025-06-01 17:29:00 · 645 阅读 · 0 评论 -
LeetCode 39.组合总和:回溯法与剪枝优化的完美结合
理解回溯法"选择-递归-回退"的状态管理模式利用排序实现高效剪枝通过起始位置控制解决元素重复使用与组合唯一性的矛盾掌握这类问题的解法,对理解回溯法在组合、子集等问题中的应用具有重要意义。原创 2025-06-01 16:49:29 · 421 阅读 · 0 评论 -
leetcode17.电话号码的字母组合:字符串映射与回溯的巧妙联动
字符映射设计:通过数组建立数字与字母的高效映射,简化查找过程。回溯状态管理:利用动态构建组合,并通过递归与回退操作确保枚举所有可能组合。递归终止条件:根据数字字符串的处理进度判断是否完成一个组合的构建,及时保存结果。原创 2025-05-31 21:03:15 · 1172 阅读 · 0 评论 -
leetcode216.组合总和III:回溯算法中多条件约束下的状态管理
元素和:通过sum变量动态维护,确保快速判断和约束组合长度:通过动态获取,确保满足长度约束元素唯一性:通过start参数控制选择范围,确保元素不重复状态变量同步维护:同时跟踪元素和、组合长度与元素选择双重剪枝优化:利用和约束与长度约束提前终止无效路径动态边界计算:通过数学推导减少搜索空间理解多约束回溯问题的关键在于把握各状态变量间的联动关系,以及如何通过剪枝策略和循环边界优化提升算法效率。这种方法不仅适用于组合总和问题,还可扩展到其他多约束条件下的组合优化问题。原创 2025-05-31 20:14:45 · 1162 阅读 · 0 评论 -
leetcode77.组合:回溯算法中for循环与状态回退的逻辑艺术
当前组合:用temp列表记录正在构建的组合结果集:用res列表存储所有有效组合选择起点:用s参数避免重复组合状态管理:用temp和res维护当前组合和结果集递归控制:通过s参数避免重复,用循环边界优化搜索回退机制:通过removeLast()实现状态回退,尝试所有可能理解回溯算法的关键在于把握"选择-递归-回退"的循环逻辑,以及如何通过参数设计避免重复计算。这种方法不仅适用于组合问题,还可扩展到排列、子集等多种组合优化问题,是算法设计中处理枚举类问题的核心技术之一。原创 2025-05-31 19:55:58 · 1124 阅读 · 0 评论 -
leetcode538.把二叉搜索树转换为累加树:反向中序遍历的数值累加之道
反向中序遍历策略:利用BST的有序性,通过反向中序遍历,保证在处理每个节点时,能获取到所有大于等于该节点值的累计和,是实现转换的核心思路。全局变量状态传递:借助全局变量sum记录累计和,在递归调用过程中传递状态,确保每个节点的转换都基于正确的累计值。递归终止与遍历逻辑:严谨的递归终止条件(空节点返回)和清晰的遍历顺序(右-根-左),保证了整棵树的每个节点都能被正确转换,且不破坏树的结构。原创 2025-05-30 20:16:33 · 1292 阅读 · 0 评论 -
leetcode108.将有序数组转换为二叉搜索树:递归切分中点构建平衡树的智慧
中点切分策略:选取有序数组中点元素作为根节点,从源头上保证左右子树节点数量的平衡性,是构建平衡树的核心策略。递归边界控制:严谨的递归终止条件,确保递归过程正确结束,避免无限循环,并能准确处理各种边界情况,保证树结构的完整性。子数组索引调整:通过合理调整递归时子数组的索引范围,实现数组的精准切分,进而构建出符合BST性质且高度平衡的子树,最终组合成完整的平衡二叉搜索树。原创 2025-05-30 20:06:05 · 658 阅读 · 0 评论 -
leetcode669.修剪二叉搜索树:递归法利用有序性精准剪枝
路径压缩:根据节点值与区间的关系,每次递归排除一半子树剪枝策略:直接舍弃不符合条件的整棵子树,无需遍历其中节点本算法通过递归方式,充分利用BST的有序性,将修剪操作转化为高效的子树排除问题。数值比较指导剪枝决策:根据节点值与区间边界的关系,直接舍弃无效子树三种剪枝场景处理:覆盖所有可能的节点值分布情况递归实现子树重构:通过递归返回值自然实现树结构的调整理解这种递归解法的关键在于把握BST的数值分布特性,将修剪问题转化为区间定位问题。原创 2025-05-30 19:21:07 · 976 阅读 · 0 评论 -
leetcode450.删除二叉搜索树中的节点:迭代法巧用中间节点应对多场景删除
摘要:本文深入解析了在二叉搜索树(BST)中删除节点的算法。通过分析BST的特性,提出迭代解法,利用pre和cur指针定位待删除节点,并针对不同场景设计处理逻辑。重点阐述了多场景判断策略,包括待删除节点的位置及其子树情况。以具体示例演示了删除过程,分析了算法的时间复杂度(O(h))和空间复杂度(O(1))。最后总结了核心技术点,包括BST特性运用、多场景处理和指针辅助操作,并指出了常见错误与优化建议,为BST节点删除提供了清晰的解决方案。原创 2025-05-29 21:35:39 · 803 阅读 · 0 评论 -
leetcode450.删除二叉搜索树中的节点:递归法利用有序性处理四种删除场景
路径确定性:根据值的大小关系,每次递归排除一半子树替换节点选择:右子树最小节点或左子树最大节点保证有序性本算法通过递归方式,充分利用BST的有序性,将删除操作转化为高效的节点定位和子树重构问题。数值比较指导路径选择:根据值的大小关系,每次递归排除一半子树三种删除场景处理:针对不同子树结构,设计相应的替换策略递归实现子树重构:通过递归返回值自然实现树结构的调整理解这种递归解法的关键在于把握BST的数值分布特性,将删除问题转化为有序序列的节点调整。原创 2025-05-29 21:25:12 · 928 阅读 · 0 评论 -
leetcode701.二叉搜索树中的插入操作:迭代法利用有序性寻找空节点插入点
路径确定性:根据值的大小关系,每次迭代排除一半子树插入点唯一性:通过比较确定唯一的插入路径本算法通过迭代方式,充分利用BST的有序性,将插入操作转化为高效的路径搜索问题。数值比较指导路径选择:根据值的大小关系,每次迭代排除一半子树空节点作为插入终止条件:确保新节点总是插入到叶子节点位置空间优化:迭代实现避免递归栈开销,空间复杂度降至O(1)理解这种迭代解法的关键在于把握BST的数值分布特性,将插入问题转化为寻找空节点的过程。原创 2025-05-29 20:52:32 · 864 阅读 · 0 评论 -
leetcode235.二叉搜索树的最近公共祖先:迭代法利用有序性高效寻根
路径压缩:每次迭代排除一半子树,直接定位可能的祖先节点避免回溯:无需遍历整棵树,仅沿一条路径向下搜索本算法通过迭代方式,充分利用BST的有序性,将LCA查找问题转化为高效的路径搜索问题。数值比较替代遍历:通过比较节点值大小,直接定位可能的祖先节点线性路径搜索:每次迭代排除一半子树,时间复杂度仅取决于树高空间优化:迭代实现避免递归栈开销,空间复杂度降至O(1)理解这种迭代解法的关键在于把握BST的数值分布特性,将LCA问题转化为区间定位问题。原创 2025-05-29 20:36:45 · 1018 阅读 · 0 评论 -
leetcode236.二叉树的最近公共祖先:递归后序遍历的祖先追踪之道
本文详细解析了使用递归法求解二叉树最近公共祖先(LCA)的问题。算法通过后序遍历自底向上查找目标节点,核心在于递归终止条件的设置和后序处理的逻辑判断。当左右子树分别包含目标节点时,当前节点即为LCA。该解法时间复杂度O(n),空间复杂度O(h),简洁高效。文章还分析了常见误区、边界条件处理,并强调了递归法在树结构问题中的优势。理解这一经典方法有助于解决类似的树结构问题。原创 2025-05-27 15:14:13 · 914 阅读 · 0 评论 -
leetcode501.二叉搜索树中的众数:递归中序遍历的频率追踪与结果动态更新
有序性利用:BST中序遍历保证相同值连续出现,无需哈希表即可统计频率递归适配:递归的左-中-右顺序天然匹配中序遍历,代码简洁直观特性驱动设计:利用BST中序遍历的有序性,将频率统计复杂度降至O(n)递归流程控制:左-中-右的递归顺序确保节点按升序访问,相同值连续处理动态结果维护:通过频率比较和列表操作,高效处理单众数和多众数场景理解这种递归解法的关键是认识到BST的有序性对频率统计的简化作用。递归的简洁性使得代码逻辑清晰,易于理解和维护,尤其适合树深度较小的场景。原创 2025-05-27 14:31:42 · 717 阅读 · 0 评论 -
leetcode501.二叉搜索树中的众数:迭代中序遍历的众数追踪与数组动态更新
相同值连续性:BST中序遍历使相同值连续出现简化频率统计:仅需比较前驱节点即可统计频率时间复杂度优化:从O(nlogn)(排序后统计)降至O(n)BST有序性的利用:中序遍历结果的有序性是解决问题的关键双计数器动态更新:通过tempCnt和count动态追踪频率变化结果列表的智能维护:根据频率关系动态调整结果集理解这种迭代法的关键是将树的结构特性(BST的有序性)转化为线性序列的频率统计问题。迭代实现避免了递归栈溢出的风险,适合处理大规模数据。原创 2025-05-27 13:55:42 · 510 阅读 · 0 评论 -
leetcode530.二叉搜索树的最小绝对差:递归中序遍历的差值追踪之道
二叉搜索树的最小绝对差问题可通过中序遍历递归解决。利用BST中序遍历结果为严格有序序列的特性,只需比较相邻节点的差值即可找到最小值,时间复杂度O(n),空间复杂度O(h)。递归过程中用pre记录前驱节点,动态更新最小差值res。该解法避免了存储完整序列,通过全局变量简化状态传递,巧妙利用有序性质将问题简化为线性扫描。原创 2025-05-27 13:10:10 · 972 阅读 · 0 评论 -
leetcode530.二叉搜索树的最小绝对差:迭代中序遍历的栈操作与差值追踪
左子树优先:通过"右-中-标记-左"的压栈顺序,利用栈的LIFO特性实现"左-中-右"的访问顺序null标记的分隔作用:区分节点的"待处理"和"已访问"状态,避免复杂的状态标记BST有序性的利用:中序遍历结果的有序性是解决问题的关键,无需暴力比较所有节点对栈的逆向压栈:通过创新的压栈顺序,利用栈的LIFO特性实现中序遍历增量差值计算:仅跟踪前一个节点,动态更新最小差值,空间效率高理解这种迭代法的关键是将树的结构特性(BST的有序性)转化为线性序列的相邻差值问题。原创 2025-05-27 12:55:53 · 701 阅读 · 0 评论 -
leetcode98.验证二叉搜索树:递归法中序遍历的递增性验证之道
顺序保证:递归顺序天然符合中序遍历的左-中-右顺序状态传递:通过全局变量max传递中序遍历的前驱节点,避免显式传递上下界误区:认为只需当前节点左右子节点满足条件即可// 错误做法:仅比较左右子节点正确逻辑:需保证左子树所有节点 < 当前节点,而非仅左子节点递归顺序的选择:左-中-右的递归顺序天然对应中序遍历,确保前驱节点的正确性状态的隐式传递:通过全局变量max记录前驱节点,避免复杂的参数传递条件的短路效应:左子树或当前节点验证失败时立即返回,提高效率。原创 2025-05-26 19:46:01 · 821 阅读 · 0 评论 -
leetcode98.验证二叉搜索树:迭代法中序遍历与栈操作的深度剖析
验证二叉搜索树(BST)是算法中的经典问题,要求我们判断给定的二叉树是否为有效的二叉搜索树。左子树上所有节点的值均严格小于根节点的值右子树上所有节点的值均严格大于根节点的值左右子树也必须为二叉搜索树左子树优先:通过“右-中-左”的压栈顺序,利用栈的LIFO特性实现“左-中-右”的访问顺序null标记的分隔作用:区分节点的“待处理”和“已访问”状态,避免复杂的状态标记误区:认为每个节点的左右子节点值直接与当前节点比较即可正确逻辑。原创 2025-05-26 19:28:42 · 1152 阅读 · 0 评论 -
leetcode700.二叉搜索树中的搜索:迭代法下二叉搜索树性质的高效应用
本文深入解析了二叉搜索树(BST)的迭代搜索算法,通过充分利用BST左小右大的特性实现高效搜索。文章详细解析了迭代解法的实现过程,包括队列数据结构的设计、BST性质在搜索方向选择中的关键作用,以及算法的时间复杂度分析。同时对比了递归与迭代方法的优缺点,指出迭代法更适合处理深度大的BST。通过具体示例演示了搜索流程,并总结了常见误区和优化建议。核心在于理解BST的有序性特性,将其转化为搜索空间的动态剪枝策略,从而将搜索复杂度优化至O(log n)。原创 2025-05-26 16:42:04 · 799 阅读 · 0 评论 -
leetcode617.合并二叉树:迭代法中层序遍历与队列操作的深度解析
合并二叉树问题的迭代解法通过队列实现层序遍历,同步处理两棵树的对应节点。核心逻辑包括:当两节点都存在时相加节点值并继续处理子节点;若仅一个节点存在则直接合并;使用队列确保处理顺序。算法时间复杂度为O(min(m,n)),空间复杂度为O(min(m,n)),相比递归方法更节省栈空间。关键优化点在于原地修改树结构,避免新建节点。需注意正确处理队列顺序和节点存在状态的三种情况,以确保合并结果的正确性。原创 2025-05-26 16:08:14 · 1365 阅读 · 0 评论 -
leetcode617.合并二叉树:递归思想下的树结构融合艺术
本文详细解析了合并两棵二叉树的递归解法。核心规则是:对应节点都存在则相加值,否则保留存在的节点。通过深度优先递归,先处理根节点再合并左右子树,利用终止条件处理空节点情况。算法时间复杂度为O(min(m,n)),空间复杂度为O(h)。关键点包括空节点优先处理、根先于子树合并和原地修改策略。文章通过示例演示了递归合并过程,分析了常见误区和边界情况,展示了递归思想在树操作中的高效应用。这种解法代码简洁、效率优良,适用于各种树结构合并场景。原创 2025-05-26 15:06:16 · 1205 阅读 · 0 评论 -
leetcode654.最大二叉树:递归分治下的最大值索引定位与树构建
本文探讨了如何构建最大二叉树,通过递归分治策略实现。核心步骤包括在子数组中找到最大值作为根节点,递归构建左右子树。使用左闭右开区间高效划分数组,避免数据拷贝。算法时间复杂度为O(n²),空间复杂度O(n)。关键点在于正确划分索引范围和递归终止条件处理。适用于理解分治思想和二叉树构建原理。原创 2025-05-25 16:07:23 · 691 阅读 · 0 评论