leetcode刷题笔记
文章平均质量分 69
主要用C++去刷,加油吧打工人
晓梦林
生活让你我经历坎坷,
只为把珍贵的玉雕刻。
展开
-
leetcode 131 学习笔记(递归、层序遍历)
131. 找树左下角的值问题描述:传送门思路:有两个关键点:切割问题,有不同的切割方式判断回文例如字符串abcdef:①从组合的角度看,选取一个a之后,在bcdef中再去选取第二个,选取b之后在cdef中在选取第三个…。②从切割的角度看,切割一个a之后,在bcdef中再去切割第二段,切割b之后在cdef中在切割第三段…。所以,切割问题也可以抽象成一棵树,如下图:当切割到最后面,即找到了切割方法,达到本层的递归终止的条件。在处理组合问题的时候,递归参数需要传入startIndex原创 2021-06-26 23:53:52 · 161 阅读 · 3 评论 -
leetcode 40 学习笔记( 求组合总和II )
40. 组合总和II问题描述:传送门思路:和leetcode 39的区别是:1、本题candidates中的每个数字在每个组合中只能使用一次。2、本题数组candidates的元素是有重复的,而leetcode39是无重复元素的数组candidates。本题和leetcode 39 一样,解集里不能包含重复的组合。值得深思的是, 集合(数组candidates)有重复元素,但不能有重复的组合。 也就是说,抽象成树形结构, 去重时,是去同一树枝上的重,还是去同一树层上使用过的重。先将ca原创 2021-06-16 16:41:24 · 235 阅读 · 5 评论 -
leetcode 39 学习笔记(求组合总和)
39. 组合总和问题描述:传送门思路:从这道题目里可以分析出两个信息。candidates 中的数字可以无限制重复被选取。1 <= candidates[i] <= 200本题虽说数量上无限重复,但是有总和限制。老规矩,抽象成树形结构如下:本题的限制是总和,只要选取的元素总和超过target,就返回。在 leetcode 77 学习笔记(组合) 与 leetcode 216 学习笔记是因为要求k个元素的组合,所以递归k层。①求递归函数参数二维数组res原创 2021-06-15 14:51:48 · 165 阅读 · 1 评论 -
leetcode 17 学习笔记
17. 电话号码的字母组合问题描述:传送门思路从示例上来说,输入“23”,最直接的想法就是两层for循环遍历了。如果输入“233”,就是三层for循环。如果输入“2333”呢,就四层for循环……其实,仔细去想,本题要解决如下三个问题:1、数字和字母如何映射2、两个字母就两个for循环,三个字符就三个for循环,但这样以此类推会发现代码根本写不出来。3、如果按错键,异常,如何处理。数字和字母如何映射用map,或者定义一个二维数组,例如:string letterMap[10],来原创 2021-06-15 02:10:28 · 212 阅读 · 2 评论 -
leetcode 216 学习笔记
216. 组合总和 III问题描述:传送门思路:本题只要理解 Leetcode 77 的原理,就会有大致的思路。本题中k,就是树的深度。9呢,就是树的宽度。例如, k=2,n=4的话,就是在集合【1,2,3,4,5,6,7,8,9】中求k(个数)=2,n(和)=4的组合。从图中可以看出,只有和为4,去组合为(1,3)的符合条件。 1、确定递归函数参数 path存放符合条件的结果,result存放结果集。path指从一条根节点到叶子节点的路径。vector<vecto原创 2021-06-14 18:23:08 · 195 阅读 · 1 评论 -
leetcode 77 学习笔记(组合,剪枝优化 一下)
前情回顾我们先来回顾一下leetcode 77 给出的回溯代码class Solution {private: vector<vector<int>> result; // 存放符合条件结果的集合 vector<int> path; // 用来存放符合条件结果 void backtracking(int n, int k, int startIndex) { if (path.size() == k) {原创 2021-06-05 12:14:08 · 169 阅读 · 0 评论 -
leetcode 77 学习笔记(组合)
77. 组合问题描述:传送门思路:比较傻的想法是两个for循环,但是如果条件是n为100,k为50,光for循环就需要50次,运算量超大。所以回溯法引入进来,用递归来做层叠嵌套。每一次的递归中嵌套一个for循环,那么递归就可以用于解决多层嵌套循环的问题了。接下来用图例解释本题的回溯搜索过程:第一次取1,集合变为2,3,4 ,因为k为2,我们只需要再取一个数就可以了,分别取2,3,4,得到集合 [1,2] [1,3] [1,4],以此类推。从图中也可以发现,n相当于树的宽度,k相当于树的原创 2021-06-03 16:28:19 · 144 阅读 · 1 评论 -
回溯法概述
目录回溯法是什么?回溯法性能评估回溯法解决的实际问题对回溯法的理解回溯法套路别看回溯法很难,但回溯法就是暴力解法回溯法是什么?回溯法是一种搜索的方式,也叫做回溯搜索法。在二叉树 leetcode 259 中,我就用到了回溯。回溯和递归,就是被包含和包含的关系。只要有递归,就会有回溯。所以,回溯函数也是递归函数。回溯法性能评估其性能不高,因为回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案。再进一步优化,就是剪枝操作。有些难题就需要“回溯搜索+剪枝”来解决。回溯法解决原创 2021-06-03 14:49:12 · 431 阅读 · 0 评论 -
leetcode 538 学习笔记(递归、层序遍历)
538. 把二叉搜索树转换为累加树问题描述:传送门思路:首先要了解累加树的概念,我们先从数组的角度去看一个有序数组【2,5,13】,如果转换成累加树就是【20,18,13】,即从后向前累加的结果。再从二叉树的角度去看,累加顺序就是右、中、左。所以,我们需要反中序遍历这棵二叉树,然后再依次累加。 1、递归 本题需要一个pre指针记录当前遍历节点cur的前一个节点,方便累加。① 确定递归函数的参数和返回值参数:pre、节点cur返回值:不需要返回值,因为要遍历整棵树,不需要返回特原创 2021-06-03 11:46:04 · 150 阅读 · 0 评论 -
leetcode 108 学习笔记(递归、迭代)
108.将有序数组转换为二叉搜索树问题描述:传送门思路:如果根据数组构造一颗二叉树,本质就是寻找分割点,分割点作为当前节点,然后递归左区间和右区间。分割点,就是数组中间位置的节点。问题来了,如果数组长度为偶数,中间节点有两个,应该取哪一个?其实取哪个都行,最后形成的平衡二叉搜索树不同而已。例如:输入:【-10,-3,0,5,9】如下两棵树,都是这个数组的平衡二叉搜索树:所以说,如果要分割的数组长度为偶数的时,中间元素为两个,取中间左边元素就是树1,取右边元素就是树2。 1、递原创 2021-06-02 22:32:13 · 248 阅读 · 0 评论 -
leetcode 669 学习笔记(递归、迭代)
669. 修剪二叉搜索树问题描述:传送门思路:比较无脑的想法是:递归处理,遇到root->val < low || root->val >high 的时候,直接return NULL。如下:class Solution {public: TreeNode* trimBST(TreeNode* root, int low, int high) { if (root == nullptr || root->val < low || ro原创 2021-06-02 12:48:17 · 183 阅读 · 0 评论 -
leetcode 450 学习笔记(递归)
450. 删除二叉搜索树中的节点问题描述:传送门思路:本地要找出树的最后一行里最左边的值。很明显,用层序遍历要简单,不建议用递归。这里还是提供一种思路。 1、递归 咋眼一看,这道题目用递归的话就就一直向左遍历,最后一个就是答案呗?没有这么简单,一直向左遍历到最后一个,它未必是最后一行啊。我们来分析一下题目:在树的「最后一行」找到「最左边的值」。首先要是最后一行,然后是最左边的值。如果使用递归法,如何判断是最后一行呢,其实就是深度最大的叶子节点一定是最后一行。所以要找深度最大原创 2021-06-02 01:51:40 · 139 阅读 · 1 评论 -
leetcode 701 学习笔记(递归、迭代)
701. 二叉搜索树中的插入操作问题描述:传送门思路:本地要找出树的最后一行里最左边的值。很明显,用层序遍历要简单,不建议用递归。这里还是提供一种思路。 1、递归 咋眼一看,这道题目用递归的话就就一直向左遍历,最后一个就是答案呗?没有这么简单,一直向左遍历到最后一个,它未必是最后一行啊。我们来分析一下题目:在树的「最后一行」找到「最左边的值」。首先要是最后一行,然后是最左边的值。如果使用递归法,如何判断是最后一行呢,其实就是深度最大的叶子节点一定是最后一行。所以要找深度最大原创 2021-06-01 14:18:14 · 183 阅读 · 0 评论 -
leetcode 235 学习笔记(递归、迭代)
235. 二叉搜索树的最近公共祖先问题描述:传送门思路: 首先要理解,二叉搜索树是有序的。在有序树中,如何判断一个节点的左子树里有p,右子树里有q呢?其实,从上到下遍历的时候,cur节点的值在【p,q】区间中,则说明该节点cur就是最近公共祖先了。因为二叉搜索树有序,只需要从上向下遍历。所以采用前序遍历,如下图所示:p为节点3,q为节点5。搜索树因为其独特属性,按照指定方向,就直接找到节点4为公共祖先,返回结果。 1、递归 ① 确定递归函数的参数和返回值参数: 当前节点,以原创 2021-05-29 02:13:17 · 110 阅读 · 3 评论 -
leetcode 236 学习笔记(递归)
513. 找树左下角的值问题描述:传送门思路:本地要找出树的最后一行里最左边的值。很明显,用层序遍历要简单,不建议用递归。这里还是提供一种思路。 1、递归 咋眼一看,这道题目用递归的话就就一直向左遍历,最后一个就是答案呗?没有这么简单,一直向左遍历到最后一个,它未必是最后一行啊。我们来分析一下题目:在树的「最后一行」找到「最左边的值」。首先要是最后一行,然后是最左边的值。如果使用递归法,如何判断是最后一行呢,其实就是深度最大的叶子节点一定是最后一行。所以要找深度最大的叶子节原创 2021-05-27 12:59:00 · 277 阅读 · 1 评论 -
leetcode 501 学习笔记(迭代法解决)
501.二叉搜索树中的众数问题描述:传送门思路:只要把中序遍历转成迭代,中间节点的处理逻辑完全一样。所以,这道题用 中序遍历 就可以做。其中间处理逻辑一点也没有变。代码:class Solution {public: vector<int> findMode(TreeNode* root) { stack<TreeNode*> st; TreeNode* cur = root; TreeNode* pre =原创 2021-05-18 23:26:16 · 408 阅读 · 1 评论 -
leetcode 530 学习笔记(递归、迭代)
530.二叉搜索树的最小绝对差问题描述:传送门思路:是求二叉搜索树上任意两节点的差的绝对值的最小值。可以想象成在有序数组上求差值。 1、递归 最简答的想法是,把二叉搜索树转换成有序数组,然后遍历一遍数组,就统计出最小差值。代码:class Solution {private:vector<int> vec;void traversal(TreeNode* root) { if (root == NULL) return; travers原创 2021-05-10 21:41:58 · 204 阅读 · 0 评论 -
leetcode 700 学习笔记(递归,迭代)
700. 二叉搜索树中的搜索问题描述:传送门思路:关于二叉搜索树,要理清一个概念,它是一个有序树。若它左子树不为空,则左子树上所有节点的值均小于它的根节点的值。若它右子树不为空,则右子树上所有节点的值均大于它的根节点的值。左右子树也是二叉树 1、递归 ① 确定递归函数的参数和返回值参数:传入根节点,以及要搜索的数值。返回值:以这个搜索数值所在的节点。代码如下:TreeNode* searchBST(TreeNode* root, int val)② 确定终止条件如原创 2021-05-10 18:17:16 · 147 阅读 · 0 评论 -
leetcode 617合并二叉树(递归)
617. 合并二叉树问题描述:传送门思路:本地要找出树的最后一行里最左边的值。很明显,用层序遍历要简单,不建议用递归。这里还是提供一种思路。 1、递归 咋眼一看,这道题目用递归的话就就一直向左遍历,最后一个就是答案呗?没有这么简单,一直向左遍历到最后一个,它未必是最后一行啊。我们来分析一下题目:在树的「最后一行」找到「最左边的值」。首先要是最后一行,然后是最左边的值。如果使用递归法,如何判断是最后一行呢,其实就是深度最大的叶子节点一定是最后一行。所以要找深度最大的叶子节点。原创 2021-05-10 17:18:45 · 105 阅读 · 1 评论 -
leetcode 654 学习笔记(递归)
654.最大二叉树问题描述:传送门思路: 1、递归 ① 确定递归函数的参数和返回值参数:存放元素的数组。返回值:返回该数组构造的二叉树的头结点返回类型:指向节点的指针TreeNode* constructMaximumBinaryTree(vector<int>& nums)②确定终止条件题目中说了输入的数组大小一定是大于等于1的,所以我们不用考虑小于1的情况。那么当递归遍历的时候,如果传入的数组大小为1,说明遍历到了叶子节点 即应定义一个新的节点,并原创 2021-05-07 11:25:48 · 106 阅读 · 2 评论 -
leetcode 105 学习笔记(从前序和中序遍历构造二叉树)
105. 从前序与中序遍历序列构造二叉树问题描述:传送门思路:和前面学过的leetcode 105一样,思路一致。 前序和中序、中序和后序等都可以确定一课二叉树,但前序和后序就不能确定一棵二叉树。 这里为什么这么设置前序的起止点,还有中序的起止点。root->left = traversal(inorder, leftInorderBegin, leftInorderEnd, preorder, leftPreorderBegin, leftPreorderEnd);因为原创 2021-05-06 11:48:22 · 182 阅读 · 0 评论 -
leetcode 106 学习笔记(根据遍历构造二叉树)
106.从中序与后序遍历序列构造二叉树问题描述:传送门思路:根据题意,流程如图:这图就是先根据后续数组的最后一个元素为切割点,去拆分中序数组。再根据拆分后的中序数组,反过来在切后序数组。说到一层一层切割,想到了递归。分以下几步:第一步:如果数组大小为零,为空节点了。第二步:如果不为空,取后序数组最后一个元素作为节点元素。第三步:找到后序数组最后一个元素在中序数组的位置,作为切割点。第四步:切割中序数组,切成中序左数组和中序右数组 。第五步:切割后序数组,切成后序左数组和后序原创 2021-05-02 16:35:08 · 171 阅读 · 1 评论 -
leetcode 513 学习笔记(递归、层序遍历)
513. 找树左下角的值问题描述:传送门思路:本地要找出树的最后一行里最左边的值。很明显,用层序遍历要简单,不建议用递归。这里还是提供一种思路。 1、递归 首先要是最后一行,然后是最左边的值。如何判断是最后一行? 就是深度最大的叶子节点一定是最后一行。所以要找深度最大的叶子节点。那么如何找最左边的呢? 可以使用前序遍历,这样才先优先左边搜索,然后记录深度最大的叶子节点,这集就是树的最后一行最左边的值。递归三部曲: ① 确定递归函数的参数和返回值 参数必须有要遍原创 2021-04-30 18:25:23 · 182 阅读 · 1 评论 -
leetcode 1112、113 学习笔记(对递归函数的进一步理解)
目录112. 路径总和问题描述思路1、递归 2、迭代 113. 路径总和II问题描述思路by the way112. 路径总和问题描述传送门思路这道题我们要遍历从根节点到叶子节点的的路径,看总和是否等于目标和。1、递归 可以使用深度优先遍历的方式(本题前中后序都可以,无所谓,因为中节点也没有处理逻辑)来遍历二叉树① 确定递归函数的参数和返回类型参数:需要二叉树的根节点,还需要一个计数器,这个计数器用来计算二叉树的一条边之和是否正好是目标和,计数器为int型。在文章二叉树:我的左原创 2021-04-28 21:37:11 · 119 阅读 · 0 评论 -
leetcode 404 学习笔记(递归、迭代)
目录404.左叶子之和问题描述思路 1、递归法 2、迭代法 by the way404.左叶子之和问题描述传送门思路这里是判断左叶子,不是二叉树左侧节点,不能用层序遍历。那么判断当前节点是不是左叶子是无法判断的,必须要通过节点的父节点来判断其左孩子是不是左叶子。 如果该节点的左节点不为空,该节点的左节点的 左节点 为空,该节点的 左节点的 右节点为空,则找到了一个左叶子,判断代码如下: if (node->left != NULL && no原创 2021-04-22 20:53:23 · 293 阅读 · 0 评论 -
leetcode 257 学习笔记(递归,迭代)
目录257. 二叉树的所有路径问题描述思路: 1、递归 2、迭代 257. 二叉树的所有路径问题描述传送门思路:这道题目要求从根节点到叶子的路径,所以需要前序遍历,这样才方便让父节点指向孩子节点,找到对应的路径。这道题涉及到回溯,因此,我们要把路径记录下来,需要回溯来回退一一个路径在进入另一个路径。 1、递归 ① 递归函数函数参数以及返回值要传入根节点,记录每一条路径的path,和存放结果集的result,这里递归不需要返回值原创 2021-04-21 11:29:58 · 363 阅读 · 0 评论 -
leetcode 110 学习笔记(判断平衡二叉树)
红标模板 红标小标题 蓝标小标题 蓝标模板 绿标小标题 绿标模板110.平衡二叉树问题描述:传送门思路: 平不平衡看高度,不是深度。先理解一个概念:二叉树节点的深度:从根节点到该节点的最长简单路径边的条数。二叉树节点的高度:从该节点到叶子节点的最长简单路径边的条数。如图: 1、递归 ①明确递归函数的参数和返回值参数的话为传入的节点指针,就没有其他参数需要传递了,返回值要返回传入节点为根节点树的深度。那么如何标记左右.原创 2021-04-21 01:06:21 · 133 阅读 · 0 评论 -
leetcode 222 学习笔记(求节点个数,递归迭代)
文章目录222. 完全二叉树的节点个数问题描述思路 1、递归法 2、迭代法 222. 完全二叉树的节点个数问题描述传送门思路依然可以使用递归法和迭代法来解决。这道题目的递归法和求二叉树的深度写法类似。而迭代法中,二叉树的层序遍历模板稍稍修改一下,记录遍历的节点数量就可以了。递归遍历的顺序依然是后序(左右中)。 1、递归法 ①确定递归函数的参数和返回值:参数就是传入树的根节点,返回就返回以该节点为根节点二叉树的节点数量原创 2021-04-20 21:29:27 · 144 阅读 · 0 评论 -
leetcode 111 学习笔记(求树深度,递归迭代)
文章目录111. 二叉树的最小深度问题描述思路 1、递归法 2、迭代法 111. 二叉树的最小深度问题描述传送门思路直觉上好像和求最大深度差不多,其实还是差不少的。遍历顺序上是后序遍历(因为要比较递归返回之后的结果),但在处理中间节点的逻辑上,最大深度很容易理解,最小深度可有一个误区,如图:题目中说的是: 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 注意是叶子节点。 1、递归法 ①确定递归函数的参数和原创 2021-04-20 20:14:33 · 261 阅读 · 1 评论 -
leetcode 104、559学习笔记(求树的深度,迭代递归)
目录leetcode 104 二叉树的最大深度思路 1、递归法 2、迭代法 leetcode 559 N叉树的最大深度思路 1、递归法 2、迭代法 leetcode 104 二叉树的最大深度 传送门思路 1、递归法 ① 确定递归函数的参数和返回值:参数就是 传入树的根节点,返回值就是返回这棵树的深度,所以 返回值为int类型。 int getDepth(TreeNode* node)②确定终止条件:如果为空节点的话,就返回0原创 2020-11-28 23:45:54 · 592 阅读 · 0 评论 -
leetcode 101学习笔记(判断对称二叉树,化繁为简)
目录前言问题描述思路分析递归法递归法前言学一门编程语言,最重要的就是在学习的时候能够把知识化繁为简。说到 化繁为简 ,就让我想起一个搞笑图片:看来,还是图解比文字解释的要快~自然而然的,引出了我们今天要说的问题: 翻转二叉树 来看一下有关问题描述。问题描述思路分析首先想清楚, 判断对称二叉树要比较的是哪两个节点,要比较的不是左右节点。其实我们要比较的是两个树(这两个树是根节点的左右子树),所以在递归遍历的过程中,也是要同时遍历两棵树。那么如何比较呢?就是看原创 2020-11-28 15:26:24 · 521 阅读 · 0 评论 -
二叉树学习小结01
目录前言正文 1、二叉平衡搜索树与红黑树的区别 2、为什么要给二叉树节点定义构造函数 3、有没有更牛的二叉树遍历方法 4、递归与迭代哪个方法好 5、翻转二叉树的中序遍历递归问题 每日寄语参考文献前言前天在CSDN上看到了一个著名的学习金字塔图,如下:这让我想起,我国著名教育学家孔子曾说过: “学而时习之,不亦说乎?”所以本着认真负责的态度,打算把这几天学习的二叉树知识消化一下,强化自己对二叉树的理解。正文 1、二叉平衡搜索树与红黑树的区别 在写第一篇二叉树学习的博客的时,我根据自学二原创 2020-11-27 19:07:20 · 777 阅读 · 2 评论 -
翻转二叉树学习笔记(leetcode226)
目录问题描述思路递归方法实现迭代方法实现广度优先遍历(层序遍历)方法实现问题描述 传送门思路我们之前学的都是各种方式遍历二叉树,而这次呢,是要翻转二叉树。那怎么翻转呢?如果要从整个树来看,翻转真的挺复杂,整个数以中间线进行翻转,如下图:可以发现,如果要翻转它,就是把每一个节点的左右孩子节点交换一下就可以了。 (注意:孩子下面的节点是一起交换的) 那这个时候,我们要思考一下,前中后序应该选哪一种遍历顺序?得出方法论:使用前序遍历和后序遍历都可以, 唯独中序遍历不原创 2020-11-26 10:22:13 · 171 阅读 · 1 评论 -
leetcode 637、429 学习笔记(模板题,二叉树层序遍历)
637.二叉树的层平均值问题描述:传送门思路:1、统计每层值的总和,以及节点个数。代码: class Solution { public: vector<double> averageOfLevels(TreeNode* root) { queue<TreeNode*> que; if (root != NULL) que.push(root); vector<double> result;原创 2020-11-25 23:21:17 · 181 阅读 · 2 评论 -
二叉树层序遍历学习笔记(leetcode102、107)
目录前言层序遍历二叉树介绍实战:leetocde102二叉树的层序遍历实战:leetocde107二叉树的层次遍历 II前言关于二叉树,前面我们学过了很多种 深度优先遍历的方法: ①用递归调用函数②用栈迭代方法1③用栈迭代方法2接下来,要学习二叉树的另一种遍历方式: 层序遍历层序遍历二叉树介绍层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。这种遍历的方式和我们之前学过的都不太一样。需要借用一个辅助数据结构即队列来实现, 队列先进先出,符合一层一层遍历的逻辑, 而栈的原创 2020-11-25 11:30:59 · 281 阅读 · 2 评论 -
用迭代法统一风格实现二叉树的遍历
目录前言思路代码前言前一篇文章学习完后,我发现风格不是很统一,除了先序和后序有关联,中序完全就是另一个风格了,一会用栈遍历,一会又用指针来遍历。那么,如何实现“一招鲜,吃遍天”的统一写法呢?思路这里以中序遍历为例,还是用栈的解决思路。将访问的节点放入栈中, 把要处理的节点也放入栈中,但是要做标记。 中序遍历动画如下:以上用例的中序遍历是:1、4、2、5、6 (左、中、右)动画中,result数组就是最终结果集。可以看出,我们将访问的节点,直接加入栈中。 但如果是处理的节点原创 2020-11-24 21:35:44 · 149 阅读 · 2 评论 -
用栈实现二叉树的前、中、后序遍历学习笔记(leetcode94\144\145)
目录前言前序遍历中序遍历后序遍历参考文献前言前面学习了递归实现二叉树的方法,而递归的定义就是: 每一次递归调用,都会把函数的局部变量、参数值和返回地址等压入调用栈中。 然后递归返回的时候,从栈顶弹出上一次递归的各项参数,所以这就是递归为什么可以返回上一层位置的原因。 那么,可以用非递归的方式实现吗? 答案是可以。所以,用栈(非递归的方式)可以实现二叉树的前中后序遍历。前序遍历这里引用一下大佬的动图,来总结一下前序遍历的规律。以上用例的前序遍历是:5、4、1、2、6 (中、左、右)在入栈时,原创 2020-11-24 16:21:42 · 794 阅读 · 2 评论 -
leetcode 452 学习笔记(贪心,用最少数量的箭引爆气球)
452. 用最少数量的箭引爆气球问题描述:传送门思路: 1、sort函数 +贪心算法1(取左极限) ①先把这些气球从小到大sort排列。遇到两个相同的区间点【0,0】、【0,1】,默认第一个进去的,小于第二个。注意,要写个cmp比较一下: private: static bool cmp(const vector<int>&a,const vector<int>&b){ return a[0]&l原创 2020-11-23 18:18:52 · 143 阅读 · 0 评论 -
leetcode144、145、94学习笔记(递归解决二叉树的三种遍历)
目录前言递归模板1、确定递归函数的参数和返回值2、确定终止条件3、确定单层递归的逻辑项目实战:leetcode144 二叉树前序遍历思路前序遍历完整代码项目实战:leetcode145 二叉树后序遍历思路后序遍历完整代码项目实战:leetcode94 二叉树中序遍历思路后序遍历完整代码总结前言前面讲过二叉树的遍历可以通过递归解决,所以,直接实战。递归模板1、确定递归函数的参数和返回值 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么,原创 2020-11-22 23:54:37 · 413 阅读 · 0 评论 -
二叉树学习的一些个人心得
目录前言二叉树的种类满二叉树完全二叉树二叉搜索树平衡二叉搜索树二叉树的存储方式二叉树的遍历方式二叉树的代码描述总结参考文献前言开启算法新征程,为了让我对二叉树有新层次的理解,加油学习吧。二叉树的种类 二叉树的两种形式:满二叉树和完全二叉树满二叉树只有度为0和度为2的节点的树,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。如下图: 深度:k 节点个数:2^k-1完全二叉树除了最底层的节点没有安排满外,其余每层节点数都达到最大值,并且最下面一层节点都集中在该层最左的若干位置。原创 2020-11-22 23:08:43 · 9473 阅读 · 0 评论