![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode刷题记录
文章平均质量分 53
LeetCode刷题记录,从2022-06后记录刷的每一道题,尽量一题多解!
小伍说-523能源
未来已来,只是尚未流行,[等风来]
展开
-
461. 汉明距离
广泛应用于多个领域。在编码理论中用于错误检测,在信息论中量化字符串之间的差异。两个整数之间的汉明距离是对应位置上数字不同的位数。大多数编程语言都内置了计算二进制表达中 1 的数量的函数。在工程中,可直接使用内置函数。其中 C 是元素的数据范围,在本题中 logC=log2 ^31 =31。循环对res进行判断,直到二进制数中的1全移除为止,每次移除计数+1。不同语言的实现方法不一,我们可以近似认为其时间复杂度为 O(1)。方法一:内置位计数功能。方法二:移位实现位计数。...原创 2022-08-02 22:08:16 · 147 阅读 · 0 评论 -
208. 实现 Trie (前缀树)
根据题目进行分析,这个可以使用哈希表进行记录,insert就是写入哈希表的过程,search就是查询哈希表的过程,如果哈希表中查询不到,就返回false,哈希表中查询到,就返回true.思路还是很清晰的。备注这种实现方法的复杂度有点高,进行编译的时候,耗时过多。可以进行进一步的优化。...原创 2022-07-28 19:28:14 · 115 阅读 · 0 评论 -
322. 零钱兑换
其中S是金额,n是面额数。我们一共需要计算O(S)个状态,S为题目所给的总金额。对于每个状态,每次需要枚举n个面额来转移状态,所以一共需要O(Sn)的时间复杂度。(DynamicProgramming,DP)是运筹学的一个分支,是求解决策过程最优化的过程。),中,对一个case专门进行了打印输出,部分截图如下(详情请看链接内容,专题博文中对这个打印输出是完整的)。针对本题,专门分析相关思路,找零钱【数组】【动态规划】。数组dp需要开长度为总金额S的空间。...原创 2022-07-22 19:33:10 · 212 阅读 · 0 评论 -
198. 打家劫舍
本题目是【动态规划】类型比较经典的题目,之前对【买股票问题】【打家劫舍问题】专门进行过专题分析,专题分析会把同类型的题目进行汇总并且对比,比本次单题目书写要更全面些。在上面基础上进行空间优化,因为发现,这个数值,就跟【前两间】房屋的金额有关,因此无需专门使用dp辅助空间进行记录,可以变更成变量即可,这样空间复杂度从原数组O(n)降低到有限个变量元素,空间复杂度下降到O(1)。使用滚动数组,可以只存储前两间房屋的最高总金额,而不需要存储整个数组的结果,因此空间复杂度是O(1)。其中n是数组长度。...原创 2022-07-22 17:37:59 · 154 阅读 · 0 评论 -
994. 腐烂的橘子
本题是【岛屿问题】以及【图像渲染】的变形体,可参考之前总结的博文。因此解题思路类似,都是【深度优先搜索】策略。原创 2022-07-20 15:34:44 · 140 阅读 · 0 评论 -
230. 二叉搜索树中第K小的元素
然后获取第k个位置,如本题我是使用list,index下标从0开始,因此第k个元素,即获取下标为k-1的元素即可,list.get(k-1);令h为树高,先到达叶子位置(最小节点位置),复杂度为O(h),然后找到第k小的元素,复杂度为O(k)。即对应的转换为把二叉搜索树,转换为【中序】遍历,并存在容器中,可以是list,数组,或者哈希表,队列均可以。无需遍历全部到元素。时间复杂度O(N)中序遍历,每个元素都遍历到,因此复杂度为O(N)。...原创 2022-07-20 12:49:38 · 930 阅读 · 0 评论 -
108. 将有序数组转换为二叉搜索树
其中n是数组的长度。空间复杂度不考虑返回值,因此空间复杂度主要取决于递归栈的深度,递归栈的深度是O(logn)。二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过1」的二叉树。【数组】----转换成【二叉树】逻辑,且要求为高度平衡的【二叉树】。,其中n是数组的长度。每个数字只访问一次。这道题等价于,升序的数组,转换为二叉树。...原创 2022-07-19 21:25:40 · 138 阅读 · 0 评论 -
74. 搜索二维矩阵
1、可以知道坐标在[0][0]点的元素,一定是最小元素,如果等于matrix[0][0],则返回true,如果(targettarget,则终止此次循环,跳出。某列的某个数字,该数之上的数字,都比其小;某行的某个数字,该数右侧的数字,都比其大;若当前数字大于了查找数,查找往上移一位。...原创 2022-07-18 21:54:22 · 194 阅读 · 0 评论 -
437. 路径总和 III
对于每一个节点,求以该节点为起点的路径数目时,则需要遍历以该节点为根节点的子树的所有节点,因此求该路径所花费的最大时间为O(N),我们会对每个节点都求一次以该节点为起点的路径数目,因此时间复杂度为。2、在编译时,倒数第二个case编译不过[1000000000,1000000000,null,294967296,null,1000000000,null,1000000000,null,1000000000]0。不需要从根节点开始,也不需要在叶子节点结束。1、求路径数目一个二叉树的根节点。...原创 2022-07-18 19:03:52 · 331 阅读 · 0 评论 -
543. 二叉树的直径
其中Height为二叉树的高度。由于递归函数在递归过程中需要为每一层递归函数分配栈空间,所以这里需要额外的空间且该空间取决于递归的深度,而递归的深度显然为二叉树的高度,并且每次递归调用的函数里又只用了常数个变量,所以所需空间复杂度为O(Height)。(1)直径长度,等价于任意两个节点路径长度中的最大值,那么也就是求过这个节点的【左子树长度】+【右子树长度】的汇总数里面的最大值。其中N为二叉树的节点数,即遍历一棵二叉树的时间复杂度,每个结点只被访问一次。(2)可以不经过根节点。...原创 2022-07-17 04:15:36 · 68 阅读 · 0 评论 -
110. 平衡二叉树
最差情况下,isBalanced(root)遍历树所有节点,占用O(N);判断每个节点的最大高度depth(root)需要遍历各子树的所有节点,子树的节点数的复杂度为O(log_2N)。就是从根节点逐步向下,发现每个节点都要验证左子树深度和右子树深度,再进行计算,这种方法显然复杂度较高,不推荐!就是先遍历到叶子结点,然后从下面到上面,只有有一个节点不符合深度差值为1的,就可以直接返回false了。最差情况下(树退化为链表时),系统递归需要使用O(N)的栈空间。...原创 2022-07-16 20:14:35 · 372 阅读 · 0 评论 -
226. 翻转二叉树
如果当前遍历到的节点root的左右两棵子树都已经翻转,那么我们只需要交换两棵子树的位置,即可完成以root为根节点的整棵子树的翻转。使用的空间由递归栈的深度决定,它等于当前节点在二叉树中的高度。在平均情况下,二叉树的高度与节点个数为对数关系,即O(logN)。使用的空间由递归栈的深度决定,它等于当前节点在二叉树中的高度。我们会遍历二叉树中的每一个节点,对每个节点而言,我们在常数时间内交换其两棵子树。我们会遍历二叉树中的每一个节点,对每个节点而言,我们在常数时间内交换其两棵子树。...原创 2022-07-16 19:26:37 · 292 阅读 · 0 评论 -
234. 回文链表
时间复杂度O(n),其中n指的是链表的大小。空间复杂度O(n)。使用了Stack栈辅助空间。建议可以看官方更好答案,这个写的空间复杂度有些高!原创 2022-07-15 21:57:27 · 108 阅读 · 0 评论 -
148. 排序链表
其中n是链表的长度。空间复杂度主要取决于递归调用的栈空间。所以一般复杂的题目是几道简单题目的【汇总和】。3、递归上面的1和2步骤即可。其中n是链表的长度。原创 2022-07-15 21:13:56 · 218 阅读 · 0 评论 -
328. 奇偶链表
2、设置index链表节点下标,如果index%2==0(初始设置index=0,则写入奇链表中),同理,index%2==1,则写入偶链表中。官方解答,比我这个使用的指针少一些,并且没有区分奇偶数下标,而是使用快慢指针模式,这样定义的ListNode可以相对少一些。其中n是链表的节点数。需要遍历链表中的每个节点,并更新指针。其中n是链表的节点数。需要遍历链表中的每个节点,并更新指针。1、设置新的链表头,并且设置奇链表头,偶链表头;奇偶链表模式,可以分别定义不同的链表。...原创 2022-07-14 19:21:40 · 389 阅读 · 0 评论 -
19. 删除链表的倒数第 N 个结点
1、题目描述 2、题目分析根据题目的几个示例,存在以下几种特殊情况:【双指针思路】:(1)第一个指针node先走 n 步;(2)获取目标删除节点的【前一个】节点, 此时head的前一个节点pre ,跟第一个指针node, 相差 (n+1)个位置 ; (3) 接下来两个指针,pre, node分别进行遍历,不难知道, 当node为null 时,pre刚好是目标删除节点的前一个节点;(4)删除pre后的节点【既目标删除节点】pre.next = pre.next.next;基础内容,链表的结构体:实现代码原创 2022-07-13 13:12:04 · 126 阅读 · 0 评论 -
14. 最长公共前缀
1、题目描述 2、题目分析2-1、纵向扫描思路纵向扫描时,从前往后遍历所有字符串的每一列,比较相同列上的字符是否相同,如果相同则继续对下一列进行比较,如果不相同则当前列不再属于公共前缀,当前列之前的部分为最长公共前缀。复杂度分析时间复杂度:O(mn),其中 m 是字符串数组中的字符串的平均长度,n 是字符串的数量。最坏情况下,字符串数组中的每个字符串的每个字符都会被比较一次。空间复杂度:O(1)。使用的额外空间复杂度为常数。2-2、其他思路当日也可以字符串两两比较,横向扫描思路等。...原创 2022-07-12 15:45:36 · 95 阅读 · 0 评论 -
205. 同构字符串
1、题目描述2、题目解析使用哈希表,互相进行映射。根据题意, s 和 t 每个位置上的字符是否都一一对应,即 s 的任意一个字符被 t 中唯一的字符对应,同时 t 的任意一个字符被 s 中唯一的字符对应。这也被称为「双射」的关系。因此使用两个哈希表,互相进行映射,从左至右遍历两个字符串的字符,不断更新两张哈希表,如果出现冲突,则无法构成同构体,返回false.实现代码如下:复杂度分析时间复杂度:O(n),其中 n 为字符串的长度。我们只需同时遍历一遍字符串 s 和 t 即可。空间复杂度:O(∣Σ∣)原创 2022-07-09 19:48:42 · 114 阅读 · 0 评论 -
299. 猜数字游戏
1、题目描述 2、题目分析常规思路: 记录出现频率的,遍历获取次数,【数组】或者【哈希表】。2-1、下面是【哈希表】实现,比较暴力,复杂度有些偏高! 1、哈希表记录,遍历secret,此时下标设置为i, 位置一致的且值也一致的,则属于题目中完全匹配,即公牛A的数量,countA++; 并记录对应的下标值,放入哈希表 indexS中; 2、其余未匹配的存入哈希表中,设置哈希表名称 need 中; 3、再遍历guess,如果是indexS中的下标,说明之前已经匹配上属原创 2022-07-10 09:17:47 · 298 阅读 · 0 评论 -
1046. 最后一块石头的重量
1、题目描述2、题目解析因为每一回合都要选出【最重的两块石头】,因此每次都需要排序,可以联想到使用现成能够自动排序的数据结构,因此 想到【堆】这个可以自动实现排序的数据结构。将所有的石头放入到大顶堆中,然后依次取出最重的两块石头x和y,必有x ≥ y。如果x > y,则将新石头x - y放回到最大堆中;如果x = y,两块石头完全被粉碎,因此不会产生新的石头。实现代码如下:复杂度分析时间复杂度:O(nlogn),其中 n 是石头数量。每次从队列中取出元素需要花费 O(logn) 的时间,最多共需要粉碎原创 2022-07-09 09:30:53 · 216 阅读 · 0 评论 -
844. 比较含退格的字符串
1、题目描述 2、题目解析进行双指针遍历方法思路解析:复杂度分析时间复杂度:O(N+M),其中 N 和 M 分别为字符串 S 和 T 的长度。我们需要遍历两字符串各一次。空间复杂度:O(1)。对于每个字符串,我们只需要定义一个指针和一个计数器即可。备注:这道题的【JAVA】实现代码(上面的代码),细节点很多,自测编译的时候,经常有case编译异常,比如注释中说的:1、 while(i >= 0 || j >= 0) //只有i或者j有一个 >= 0,就进行空格校验,数据比较 备注:..原创 2022-07-08 15:21:00 · 455 阅读 · 0 评论 -
567. 字符串的排列
1、题目描述 2、题目解析参照【滑动窗口】通用解题模板,直接套用即可,对应我之前总结的链接为:算法分享系列--滑动窗口问题以下是【JAVA】实现的完整版本:复杂度分析时间复杂度:最坏情况下左右指针对 【s2】 的每个元素各遍历一遍,哈希表中对 【s2】 中的每个元素各插入、删除一次,对 【s1】 中的元素各插入一次。每次检查是否可行会遍历整个 【s1】 的哈希表,哈希表的大小与字符集的大小有关,则渐进时间复杂度为 O(∣s1∣+∣s2∣)。空间复杂度:这里用了两张哈希表作为辅助空间,每张哈希表最多不原创 2022-07-08 11:22:48 · 87 阅读 · 0 评论 -
438. 找到字符串中所有字母异位词
1、题目描述2、题目解析 题目中出现了一个名词,【异位词】异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。此题可以用经典的【滑动窗口解法】,从网上找到了一个大神(labuladong)的打油诗:可以参考滑动窗口共用模板进行代码实现完善,公共模板参考之前梳理文章,链接如下:算法分享系列--滑动窗口问题 【滑动窗口】子串问题全靠它。左右指针滑窗口。此类算法的模板代码显示如下:真的是怒赞暴力推荐大神lubuladong 的这套全解析【简直是神操作】:力扣https://leetcode.cn/p原创 2022-07-07 17:19:17 · 114 阅读 · 0 评论 -
62. 不同路径
1、题目描述2、题目解析尝试动态规划方法,相当于从左上角到 i , j 的路径:复杂度分析时间复杂度:O(m*n)空间复杂度:O(m*n), 辅助空间dp的二维数组,即为存储所有状态需要的空间。注意到dp[i][j] 仅与和的状态有关,因此我们可以使用滚动数组代替代码中的二维数组,使空间复杂度降低为 O(n)....原创 2022-07-06 04:17:04 · 84 阅读 · 0 评论 -
746. 使用最小花费爬楼梯
1、题目描述 2、题目解析本题使用动态规划来解决比较简便,难点在于找到对应的递推公式。根据题意分析,假设数组 cost 的长度为 n,则 n 个阶梯分别对应下标 0 到 n-1,楼层顶部对应下标 n,问题等价于计算达到下标 n 的最小花费。当 2≤i≤n 时,可以从下标 i−1 使用 cost[i−1] 的花费达到下标 i,或者从下标 i−2 使用 cost[i−2] 的花费达到下标 i。为了使总花费最小,dp[i] 应取上述两项最小值,因此状态转移方程如下: dp[i]=min(dp[i−1]+cost原创 2022-07-05 17:36:18 · 191 阅读 · 0 评论 -
56. 合并区间
1、题目描述 2、题目解析合并区间的逻辑,第一个区间的结束位置 ≤ 第二个区间的起始位置,就可以进行这两个区间的合并,同理,合并N个区间,就是合并N-1个两两区间即可。具体代码如下:复杂度分析时间复杂度:O(nlogn),其中 n 为区间的数量。除去排序的开销,我们只需要一次线性扫描,所以主要的时间开销是排序的 O(nlogn)。空间复杂度:O(logn),其中 n 为区间的数量。这里计算的是存储答案之外,使用的额外空间。O(logn) 即为排序所需要的空间复杂度。【备注】上面代码两处难点:1、给原创 2022-07-04 21:54:00 · 110 阅读 · 0 评论 -
70. 爬楼梯
1、题目描述 2、题目解析该题目就是【斐波那契数列】的引申沿用,可以参考已经总结的文章,链接如下:509. 斐波那契数(3种解法模式)由于509.斐波那契数 使用了3种解法模式,分别是【暴力递归法】,【动态规划法】,【动态规划--常量模式】,参考时间和空间综合考虑,本题使用【动态规划法】dp辅助空间模式(比较通用),想要看其他解法的,可以参考上面链接的509题。根据递推公式:F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1原创 2022-07-04 17:31:27 · 111 阅读 · 0 评论 -
509. 斐波那契数
1、题目描述 2、题目解析斐波那契数列是典型中的典型题目! (来自百度百科)。 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)。解法一:递归当时原创 2022-07-04 16:23:52 · 210 阅读 · 0 评论 -
435. 无重叠区间
一、题目描述 二、解题思路此题要求获取最多不重复的区间,给区间段进行排序。是以区间段段左侧排序?还是以区间段段右侧排序?不断地寻找【右端点】在首个区间右端点左侧的新区间,将首个区间替换成该区间。那么当我们无法替换时,首个区间就是所有可以选择的区间中右端点最小的那个区间。因此我们将所有区间按照右端点从小到大进行排序,那么排完序之后的首个区间,就是我们选择的首个区间。如果有【多个区间的右端点都同样最小】怎么办?由于我们选择的是首个区间,因此在左侧不会有其它的区间,那么左端点在何处是不重要的,我们只要任意选择一个原创 2022-07-03 21:03:51 · 198 阅读 · 0 评论 -
算法专题---贪心算法
一、贪心算法和回溯算法,动态规划的区别「解决一个问题需要多个步骤,每一个步骤有多种选择」这样的描述我们在「回溯算法」「动态规划」算法中都会看到。它们的区别如下:「回溯算法」需要记录每一个步骤、每一个选择,用于回答所有具体解的问题;「动态规划」需要记录的是每一个步骤、所有选择的汇总值(最大、最小或者计数);「贪心算法」由于适用的问题,每一个步骤只有一种选择,一般而言只需要记录与当前步骤相关的变量的值。二、贪心算法满足的条件 「贪心算法」总是做出在当前看来最好的选择就可以完成任务;解决「贪心算法」原创 2022-07-03 16:46:50 · 167 阅读 · 0 评论 -
200. 岛屿数量
1、题目描述 2、题目分析为了求出岛屿的数量,扫描整个二维网格。如果一个位置为 1,则以其为起始节点开始进行深度优先搜索。在深度优先搜索的过程中,【每个搜索到的 1 都会被重新标记为 0】。最终岛屿的数量就是我们进行深度优先搜索的次数。下面的动画展示了整个算法。复杂度分析时间复杂度:O(MN),其中 M 和 N 分别为行数和列数。空间复杂度:O(MN),在最坏情况下,整个网格均为陆地,深度优先搜索的深度达到 M N。...原创 2022-07-03 16:41:02 · 232 阅读 · 0 评论 -
733. 图像渲染
1、题目描述2、题目解析【深度优先搜索】 复杂度分析时间复杂度:O(n×m),其中 n 和 m 分别是二维数组的行数和列数。最坏情况下需要遍历所有的方格一次。空间复杂度:)O(n×m),其中 n 和 mm分别是二维数组的行数和列数。主要为栈空间的开销。...原创 2022-07-03 14:31:16 · 157 阅读 · 0 评论 -
860. 柠檬水找零
1、题目描述 2、题目分析由于顾客只可能给你三个面值的钞票,而且我们一开始没有任何钞票,因此我们拥有的钞票面值只可能是 5 美元,10 美元和 20 美元三种。基于此,我们可以进行如下的分类讨论。5 美元,由于柠檬水的价格也为 5 美元,因此我们直接收下即可。10 美元,我们需要找回 5 美元,如果没有 5 美元面值的钞票,则无法正确找零。20 美元,我们需要找回 15 美元,此时有两种组合方式,一种是一张 10 美元和 5 美元的钞票,一种是 3 张 5 美元的钞票,如果两种组合方式都没有,则无法正确找零原创 2022-07-02 20:40:47 · 156 阅读 · 0 评论 -
455. 分发饼干
1、题目描述 2、题目分析由于目标是要尽可能满足越多数量的孩子,因此可以想到为了尽可能满足最多数量的孩子,从贪心的角度考虑,应该按照孩子的胃口从小到大的顺序依次满足每个孩子,且对于每个孩子,应该选择可以满足这个孩子的胃口且尺寸最小的饼干。证明如下。备注:以下代码比官方的简便些,官方的是引入了count变量,再进行一次比较,但是因为已经提前给 g , s 排好序了,必然先满足最小的孩子食量,不满足时,孩子数量不增加,直到食量最小的孩子先满足后,才会进行下一个孩子的比较验证,即可。 复杂度分析时间复杂度:原创 2022-07-02 18:04:20 · 109 阅读 · 0 评论 -
235. 二叉搜索树的最近公共祖先
1、题目描述 2、题目分析求【二叉搜素树】的公共祖先,首先先了解基础概念,二叉搜索树的特性的特有特性。 二叉搜索树的特性,二叉树的左子树不为空,则左子树上所有节点的值均小于它的根节点的值; 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;它的左右子树也为二叉搜索树。2-1、根据数值进行判定复杂度分析时间复杂度:O(n),其中 n是给定的二叉搜索树中的节点个数。分析思路与方法一相同。空间复杂度:O(1)。2-2、代码进行递进逻辑思路根上面完全一致,代码可以进行精简优化。原创 2022-07-02 12:30:18 · 277 阅读 · 0 评论 -
98. 验证二叉搜索树
1、题目描述2、解决思路二叉搜索树的特性,二叉树的左子树不为空,则左子树上所有节点的值均小于它的根节点的值; 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;它的左右子树也为二叉搜索树。2-1、【递归】复杂度分析时间复杂度:O(n),其中 n 为二叉树的节点个数。在递归调用的时候二叉树的每个节点最多被访问一次,因此时间复杂度为 O(n)。空间复杂度:O(n),其中 n 为二叉树的节点个数。递归函数在递归过程中需要为每一层递归函数分配栈空间,所以这里需要额外的空间且该空间取决于递归的深度,原创 2022-07-02 10:14:51 · 100 阅读 · 0 评论 -
278. 第一个错误的版本
1、题目描述2、题目解答题目跟704.二分查找解决逻辑一致,可参考:704. 二分查找自增版本号,是一个有序的数组。可使用二分查找用于查找。每次查找都会将查找范围缩小一半,因此二分查找的时间复杂度是 O(logn),其中 n 是版本的数量。二分查找的条件是查找范围不为空,即 left ≤ right。此时L=R,缩短到一个点,为目标答案。完整代码如下:复杂度分析时间复杂度 :O(logn),其中 n 是给定版本的数量。空间复杂度:O(1)。我们只需要常数的空间保存若干变量。...原创 2022-07-01 17:52:37 · 87 阅读 · 0 评论 -
704. 二分查找
1、题目描述2、题目分析是一个已经拍好序的有序(升序)数组 ,因此可以有很多思路,最简单的就是暴力法,循环遍历一次然后依次比对,效率高一些的思路是【二分查找】。每次查找都会将查找范围缩小一半,因此二分查找的时间复杂度是 O(logn),其中 n 是数组的长度。二分查找的条件是查找范围不为空,即 left ≤ right。如果 target 在数组中,二分查找可以保证找到 target,返回 target 在数组中的下标。如果 target 不在数组中,则当 left > right 时结束查找,返回 -1原创 2022-07-01 17:34:26 · 100 阅读 · 0 评论 -
102. 二叉树的层序遍历
1、题目描述2、题目分析 【该题是非常经典的题目!】可参考之前分析文章:二叉树的层序遍历(从上到下,从下到上,之字/锯齿/蛇形)遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有节点,使每一个节点都被访问一次,而且只被访问一次。最基本的是树的结构体(根,左子树,右子树)【层序遍历】方法一:DFS-递归解题思路代码分析:1、如果深度为res的长度,则开启新的一层用于记录(这一行比较难理解)2、在当前list行进行元素追加 3、完整代码如下:复杂度分析时间复杂原创 2022-06-30 15:23:57 · 691 阅读 · 0 评论 -
589. N 叉树的前序遍历
1、题目描述 2、题目解答分析题目前提(N叉树结构体)可参考二叉树的前序遍历逻辑:实现二叉树的先序,中序和后序遍历复杂度分析时间复杂度:O(m),其中 m 为 N 叉树的节点。每个节点恰好被遍历一次。空间复杂度:O(m),递归过程中需要调用栈的开销,平均情况下为 O(logm),最坏情况下树的深度为 m-1,此时需要的空间复杂度为 O(m)。备注:一般此类遍历,不是递归,就是迭代(使用队列容器)完成,此题用容器法较复杂,但是在层序遍历时,请尽量两种方法都写出。...原创 2022-06-30 09:11:15 · 151 阅读 · 0 评论