![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
刷题
leetcode刷题
FF_y
这个作者很懒,什么都没留下…
展开
-
力扣337题(树形dp、二叉树后序遍历)
力扣337题原创 2022-10-06 20:25:57 · 288 阅读 · 1 评论 -
多重背包问题
多重背包问题原创 2022-09-29 13:54:59 · 131 阅读 · 0 评论 -
leetcode1129题(图的BFS)
leetcode1129题原创 2022-07-25 17:12:16 · 156 阅读 · 0 评论 -
完全背包问题
完全背包问题:有n种不同的物品和一个能承受重量为m的背包,每种物品的重量和价值都可能不一样,且每种物品都有无数个,求解如何才能让背包装的物品价值最大。完全背包问题跟01背包问题的最大区别就在于物品的数量不同,01背包问题中每种物品的个数都为1。01背包问题如果用一维数组去解题的话,要求外层循环是遍历物品,内层循环遍历背包容量,并且内层循环需要逆向遍历,保证每种物品只被放入背包一次;而完全背包问题的话,如果用一维数组去解题的话,内层循环就不需要逆向遍历了,因为每种物品都可以被放入背包多次。// 先遍历原创 2022-03-05 11:56:25 · 166 阅读 · 0 评论 -
力扣416题、1049题(背包,动态规划,数组划分问题)
416.给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。咋一看觉得还挺不好做,需要找到所有的分割数组的方法,这暴力解法既不好想又不好做。看了题解才恍然大悟这可以用解决01背包问题的思路来做。将数组中所有的元素都看作物品,每个元素的值即作为物品的价值,又作为物品的体积来看待,然后将所有元素的值都求和除以2,得到的数作为背包的体积。为什么呢?因为这样做的话,如果数组中有某些元素能够刚好填满这个背包,那么剩下的元素就自然而然地归到了一块原创 2022-01-24 21:43:41 · 270 阅读 · 0 评论 -
01背包问题
01背包问题是指有一个固定容量的背包和一些不同体积且不同价值的物品,每个物品只有一个,要通过怎么样放物品才能使背包内的物品价值最大。公众号代码随想录的一篇关于[01背包的文章]我觉得讲解的算比较通俗易懂,虽然文章较长,但是看下来然后动手推导一遍还是比较清晰明了的。其中给出的这么一个例子:对应给出的思路很清晰:构建一个二维数组dp[i][j],i的最大下标为物品的最大编号,j的最大下标为背包的最大重量。dp[i][j]代表从编号0-i的物品中取任意几个物品,使得重量为j的背包中的物品的价值最大.原创 2021-11-23 10:51:21 · 232 阅读 · 0 评论 -
力扣70题(爬楼梯、动态规划)
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。按照动态规划五步法,第一步应该确定dp数组每个元素的含义,dp[i]代表到第i阶楼梯有多少种方法。第二步应该确定递推公式,由于每次只能爬一阶或者两阶,所以dp[i]可以由dp[i - 1]和的dp[i - 2]得到,因为dp[i - 1]是到第i - 1阶有多少种方法,再爬一阶就是第i阶了,dp[i - 2]是到第i - 2阶有多少种方法,再一次性爬两阶原创 2021-10-21 00:38:32 · 278 阅读 · 0 评论 -
力扣509题(斐波那契数列、动态规划、递归)
509.斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给你 n ,请计算 F(n) 。本题算是递归题目的一道很基础很经典的题,如果使用递归解法其实很简单,甚至不需要思考就能够直接把代码写出来了。递归解法的时间复杂度为O(2^n),空间复杂度为n。int fib(int n){ if原创 2021-10-20 20:00:14 · 165 阅读 · 0 评论 -
力扣763题(哈希表)
763.字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。题目需要将同一字母划分在一个片段中,没有接触过这种题目还是比较难想到用什么方法去解题。题解用的方法是用一个哈希表(数组)来统计每个字符出现的最大下标,然后遍历每个字符,并同时更新字符出现的最大下标,当遍历到的下标跟字符出现的最大下标相等时,这个位置就是划分字符串的一个位置,然后接着找下一个划分的位置。代码如下:/**Note: The return原创 2021-10-08 00:33:33 · 148 阅读 · 0 评论 -
力扣435题(贪心算法,无重叠区间)
452.给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。这个题第一眼看下来就隐隐约约感觉需要先进行排序才可以做,但是又感觉不太需要,觉得遍历一下每个区间然后发现重叠就进行计数就可以了,但是一动手又不知道应该怎么去做,比如如果有三个区间,那么如果第二个区间跟第一个和第三个区间都有相交的话,那么显然我可以去掉第二个区间就不会有重叠区间了,但是按照我前面这种想法的话那就是要原创 2021-10-07 14:45:11 · 264 阅读 · 0 评论 -
力扣452题(用最少的箭戳爆气球,贪心算法、暂时未解)
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/minimum-number-of-arrows-to-burst-balloons著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。452.在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。原创 2021-09-10 20:23:28 · 198 阅读 · 0 评论 -
力扣135题(分发糖果、贪心算法、较难)
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/candy著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。135.老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?这是一个困难题,只能求助题解。题解使用两原创 2021-09-03 21:27:51 · 211 阅读 · 0 评论 -
力扣55题、45题(跳跃问题、贪心算法)
55.给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。看到这个题目就陷入了每一步应该怎么跳,于是就开始搞两个循环嵌套去判断每一步跳到什么位置,但是这样很容易就会因为考虑不到某些测试用例而导致代码编写错误,这不是一种好方法。题解给的思路很巧秒,不管怎么跳,最终还是能够跳到的,因此跳的过程不是关键,跳的结果才是关键。我们可以用一个整型变量cover来表示目前所能覆盖到的最大范围,然后遍历目前所能覆盖到的最原创 2021-08-25 12:20:20 · 301 阅读 · 0 评论 -
力扣122题(买卖股票,贪心算法)
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。122.给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)看到题目很自原创 2021-08-24 12:02:15 · 570 阅读 · 0 评论 -
力扣53题(求最大子序列和、贪心算法)
53.给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。看到这个题最初的想法是分别计算所有长度的子序列的和,然后取最大的那一个,于是有了以下的代码,显然这是一种暴力解法,时间复杂度太高了,在leetcode过不了。int calSum(int* nums, int start, int end) { int sum = 0; for (int i = start; i <= end; i++) { sum +=原创 2021-08-23 16:52:31 · 490 阅读 · 0 评论 -
力扣376题(贪心算法)
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/wiggle-subsequence著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。376.如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替原创 2021-08-22 16:22:37 · 144 阅读 · 0 评论 -
力扣455题(分配饼干、贪心算法)
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/assign-cookies著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。455.假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩原创 2021-08-22 11:39:33 · 248 阅读 · 0 评论 -
力扣37题(解数独、递归、回溯、未解)
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sudoku-solver著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。37.编写一个程序,通过填充空格来解决数独问题。数独的解法需 遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用 ‘.’ 表示。又是一道难题,只原创 2021-08-21 12:17:11 · 366 阅读 · 0 评论 -
力扣51题(n皇后问题、递归、回溯)
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/n-queens著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。51.n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。对于国际象棋我也是一窍不同,但是n皇后问题原创 2021-08-21 00:04:31 · 306 阅读 · 0 评论 -
力扣46题、47题(求排列、递归、回溯)
46.给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。求排列问题跟求组合问题和分割子串问题最大的不同在于,求组合问题和分割子串问题都需要定义一个整型变量startIndex去控制对数组和字符串的遍历范围(求不同集合之间的组合除外),而求排列问题不需要设置startIndex去控制对数组的遍历范围,每次遍历都需要从数组头开始遍历,即就算之前的数被使用过,后面仍然需要被使用。举例来说,就是元素1在获得排列[1,2]的过程中已经使用过,但是后面再获得排列[2,原创 2021-08-17 23:43:20 · 119 阅读 · 0 评论 -
力扣491题(求递增子序列,递归、回溯)
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/increasing-subsequences著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。491.给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。看到题目一顿操作写出以下代码。逐一取出数组nums中的元素放入pat原创 2021-08-17 18:26:46 · 139 阅读 · 0 评论 -
力扣70题(求子集、递归、回溯)
70.给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。在做了131、93题的分割字符串后,本以为这个题是个比较简单的题,只要按照之前分割的步骤走就可以解决题目了,于是一顿操作写出以下代码。可是发现根本过不了!然后仔细一想,不对啊,这样一步一步移动和扩大区间去分割字符串得到子集的方式会漏掉很多子集啊,比如字符串“123”,以下代码可以取到1、12、123,但是无法取到13,这也就是过不了的原因所在了,因为总原创 2021-08-17 11:57:20 · 273 阅读 · 0 评论 -
力扣93题(找IP地址、分割问题、递归、回溯)
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/restore-ip-addresses著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。93.给定一个只包含数字的字符串,用以表示一个 IP 地址,返回所有可能从 s 获得的 有效 IP 地址 。你可以按任何顺序返回答案。有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。例如:“0.1.2.201” 和 “原创 2021-08-17 00:39:09 · 465 阅读 · 0 评论 -
力扣131题(分割回文串、回溯、递归)
131.给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。第一次做这种分割字符串的题,直接懵掉,还是求助题解吧。根据题解(C++)总算是撸出了以下代码(C),由于这次涉及到了三级指针,把我绕的一愣一愣的,改了很多次才总算是AC了。分割的问题跟求组合的问题起始有一点类似,求组合是按顺序取了一个数之后,在剩余的数中再取一个数,这样循环下去;而分割是在字符串中切走前面一个字母或一个子串后,在剩余的字符串中再切走一个字原创 2021-08-16 21:12:55 · 203 阅读 · 0 评论 -
力扣39题、40题(求组合总和、回溯、递归)
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/combination-sum著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。39.给定一个无重复元素的正整数数组 candidates 和一个正整数 target ,找出 candidates 中所有可以使数字和为目标数 target 的唯一组合。candidates 中的数字可以无限制重复被选取。如果至少一个所选数字数量不同,则两种组合是唯一的。 对于给定的输入,保证和为 ta原创 2021-08-16 10:12:10 · 188 阅读 · 0 评论 -
力扣17题(求组合、回溯、递归)
17.给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。数字2-9能表示的数字对应着手机按键。由于一个数字可以对应着多个字母,因此如果给定包含n个数字的字符串,我们就需要有n个for循环来嵌套才能找到所有的组合,这种求组合问题当然是需要用到回溯。代码中需要有一个映射表,用于存储每个数字跟相应的字母之间的映射关系。遍历的过程是这样的:每次从数字字符串中取出一个数字,再通过映射表找到与这个数字对应的字母字符串,然后依次取出这个字母字符串的一个,再进入递归来原创 2021-08-15 14:23:21 · 280 阅读 · 0 评论 -
力扣77题、216题(求组合、回溯、递归)
77.给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。说到回溯那就离不开递归,回溯就是递归中的一种现象, 某些传递给递归函数的参数,在递归结束的时候,这些参数又会变成进入递归函数之前的样子,利用这种特性就可以用来解决一些穷举问题。比如该题,返回k个数的组合,如果不使用递归的话,那么当就需要有k个for循环嵌套,这样根本写不出来。但是如果利用递归的话,每个递归中设置一个for循环,那么就可以利用递归来实现很多个for循环嵌套了,利用的方法就是在原创 2021-08-13 14:25:21 · 274 阅读 · 0 评论 -
力扣669题(修剪二叉搜索树、递归)
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/trim-a-binary-search-tree著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。669.给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树不应该改变保留在树中的元素的相对结构(即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在唯一的答案。所以结原创 2021-08-11 12:05:11 · 131 阅读 · 0 评论 -
力扣450题(删除二叉搜索树的结点、递归、迭代)
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/delete-node-in-a-bst著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。450.给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。说明: 要求算法时间复杂度为 O原创 2021-08-10 15:39:33 · 151 阅读 · 0 评论 -
力扣236题、235题(二叉树、公共祖先、递归、较难)
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。236.给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”原创 2021-08-09 11:17:48 · 186 阅读 · 0 评论 -
力扣501题(二叉搜索树、中序遍历、递归、迭代)
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-mode-in-binary-search-tree著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。501.给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。假定 BST 有如下定义:结点左子树中所含结点的值小于等于当前结点的值结点右子树中所含结点的值大于等于当前结点的值左子树和右子树都是二叉搜索树看到该题很直观的想法就原创 2021-08-08 12:50:31 · 133 阅读 · 0 评论 -
力扣530题(二叉搜索树、中序遍历、递归)
530.给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。一开始以为只需要将二叉树根结点跟左子树最大的元素的差的绝对值与二叉树根结点跟右子树最小的元素的差绝对值进行比较即可,但是这样的思路是不对的,其他元素之间的差值的绝对值可能更小。看到题解的提示就明白怎么写了,求出二叉搜索树的中序遍历序列,由于二叉树搜索树的中序遍历序列是升序的,因此只需要对这个序列的相邻元素进行相减就可以得到差值的最小值了。/** * Definition for a binary tree原创 2021-08-08 11:12:38 · 98 阅读 · 0 评论 -
力扣98题(二叉搜索树、递归、迭代,有疑问)
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/validate-binary-search-tree著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。98.给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。看到题目时,想着跟平常解决二叉树题目一样,递归地判断左右子树是否满足原创 2021-08-07 17:57:23 · 188 阅读 · 0 评论 -
力扣617题(合并二叉树、递归、迭代法)
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/merge-two-binary-trees著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。617.给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。递归解法:/** * Defin原创 2021-08-06 11:40:21 · 113 阅读 · 0 评论 -
力扣106题、105题(构造二叉树、递归)
106.根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。我们都知道后序遍历最后一个元素就是根结点,所以可以将后序遍历最后一个元素取出来,然后利用这个元素去分割中序遍历,得到中序遍历中二叉树左子树和右子树的元素所在范围,并且根据元素个数还能够得到后序遍历中二叉树左子树和右子树的元素所在范围。于是我们就有了二叉树左子树的中序遍历和后序遍历以及右子树的中序遍历和后序遍历,递归地对左右子树进行处理即可构造出所要的二叉树。每次对中序遍历序列和后序遍历序列进行划分后,都会产生四个区原创 2021-08-05 11:54:33 · 175 阅读 · 0 评论 -
力扣112题、113题(二叉树、递归)
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/path-sum著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。112.给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。叶子节点 是指没有子节点的节点。看到这个题就想到之前257题求解二叉树的所有路径,所以按照257题的思路进行改进,用一个path原创 2021-08-03 19:41:01 · 188 阅读 · 0 评论 -
力扣513题(二叉树、递归、迭代)
513.给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。该题如果使用迭代法,也就是不利用递归,利用层次遍历来解题,其实算是一道简单题。/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */in原创 2021-08-03 15:08:16 · 113 阅读 · 0 评论 -
力扣257题(二叉树、递归、迭代、回溯、较难)
257.给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。该题虽然说是简单题,但做起来却不那么简单,依旧是可以利用递归或者迭代法来解,但是在编写递归函数就犯了难。如何才能一个路径不漏地利用递归解出这个题呢?通过看题解有了一下代码:通过前序遍历递归地求解每个路径;其中用一个path数组来存储每条路径中非叶结点的值,当递归到叶子结点的时候,将path数组中的值一个一个取出来利用sprintf函数拼接成一个字符串,在接上当前结点的值,形成一条路径存储到结果数组中。/原创 2021-08-01 20:20:15 · 228 阅读 · 0 评论 -
力扣110题(平衡二叉树、递归)
110.给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。递归解法如下:递归地求解左右子树是否为平衡二叉树,求左右子树是否为平衡二叉树的方法是对求高度的递归函数进行一些改造,当求出来的左右子树的高度差大于1的时候就返回-1,表明此时已经不满足平衡二叉树的定义了。/** * Definition for a binary tree node. * struct TreeNode { * int原创 2021-08-01 11:46:34 · 168 阅读 · 0 评论 -
力扣111题(二叉树、递归、层次遍历)
111.给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。通过层次遍历,只要找到有一个结点的左右结点都为空时,就返回此时的层数,即为最小深度。/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; *原创 2021-07-31 13:17:10 · 143 阅读 · 0 评论