![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Leecode
未来未来_
个人学习理解笔记
展开
-
77、组合
题解:组合问题其实可以暴力求解,用for循环嵌套,但在此题中如果k的值很大,那就需要多层嵌套,求解困难。原创 2024-07-08 15:49:03 · 60 阅读 · 0 评论 -
450、删除二叉搜索树中的节点
是 C++11 引入的一种关键字,用于自动推导变量的类型。编译器会根据变量的初始化表达式来推断变量的类型。对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。中通过递归返回值来加入新节点, 这里也可以通过递归返回值删除节点。遇到空返回,其实这也说明没找到删除的节点,遍历到空节点直接返回了。1)对单层递归逻辑即找到key值时的五种情况的分析。这里就把二叉搜索树中删除节点遇到的情况都搞清楚。节点的右子节点赋值给一个自动类型推导的变量。给定一个二叉搜索树的根节点。原创 2024-07-04 22:02:19 · 216 阅读 · 0 评论 -
701、二叉搜索树中的插入操作
1)照题目所说,插入新值之后搜索树可能有多种结果,为了解题简单,选择不改变原本树形结构的基础上插入,即遍历搜索树,用if条件判断语句决定遍历的方向,当遇到节点为NULL时就是找到了插入的位置,这是由于搜索树的性质决定的。,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。,将值插入二叉搜索树。返回插入后二叉搜索树的根节点。,新值和原始二叉搜索树中的任意节点值都不同。给定二叉搜索树(BST)的根节点。原创 2024-07-04 20:59:23 · 121 阅读 · 0 评论 -
236、二叉树的最近公共祖先
形象化表示就是从root节点开始派出左右两个侦察兵,先判断他们是不是目标值,如果不是就让他们各自在探查自己的左右两个侦察兵是不是,不是就接着递归,直到有一个找到了目标值,就将找到这个目标值的侦察兵的信息记录一层一层传递回来,若有一个节点的左右侦察兵同时接到了探查信息,就将这个节点逐级返回。在回溯的过程中,必然要遍历整棵二叉树,即使已经找到结果了,依然要把其他节点遍历完,因为要使用递归函数的返回值(也就是代码中的left和right)做逻辑判断。原创 2024-07-02 21:31:35 · 213 阅读 · 0 评论 -
501、二叉搜索树中的众数
所以其实不用遍历两遍:先遍历一遍找到长度最大的,再遍历一遍符合把这个长度val输出。先设立一个maxCount值,并从一开始就将符合的值放进去,之后动态的改变maxCount,当遍历得到的count比现在的maxcount更大时,就更新maxcount,并且把之前放进reslut的值都清空,把新的放进去。要点:重点在单层逻辑的处理中,因为是搜索树,所以按照中序遍历的话节点的值是递增的,所以形象化的可以将二叉树想成一段一段递增的数列,要找到众数,就是找到哪一段或几段是最长的。,找出并返回 BST 中的所有。原创 2024-07-01 22:24:32 · 382 阅读 · 0 评论 -
530、二叉搜索树的最小绝对差
差值是一个正数,其数值等于两值之差的绝对值。给你一个二叉搜索树的根节点。原创 2024-06-30 19:48:51 · 130 阅读 · 0 评论 -
98、验证二叉搜索树
题解:若要验证是否为二叉搜索树,就要从它的特性入手,二叉搜索树若按照中序遍历的顺序及左中右,则val是单调递增的,所以此题选择中序遍历的顺序,结合双指针法,判断递归时节点的值是否后一个比前一个大。1、对于是否递增的判断,不能简单的对节点的左右进行判断,要保证左子树内所有节点都小于根节点,右子树内所有节点都大于根节点。,判断其是否是一个有效的二叉搜索树。给你一个二叉树的根节点。原创 2024-06-28 20:34:50 · 132 阅读 · 0 评论 -
617、合并二叉树
想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;要求合并从根节点开始,那么就选择前序遍历,在tree1的基础上将tree1的节点重新修改。null 的节点将直接作为新二叉树的节点。合并过程必须从两个树的根节点开始。返回合并后的二叉树。原创 2024-06-26 19:30:32 · 155 阅读 · 0 评论 -
112、路径总和
1、注意回溯是发生在遍历完一个节点后在回溯,而不是在单层递归逻辑中,否则就相当于每次递归什么都没做。2、若采用递减判断,主函数传参传入的是减去了根节点值的目标值。的路径,这条路径上所有节点值相加等于目标和。和一个表示目标和的整数。是指没有子节点的节点。原创 2024-06-20 22:28:29 · 299 阅读 · 0 评论 -
404、左叶子之和
在递归中,在单层递归逻辑中,开始递归前决不能用ruturn来记录获得的值,否则递归就不会开始。题解:可以采用后序递归遍历的方式,先将左右子树的左叶子节点值计算出来,最后相加。当遍历到左叶子节点的父节点时就开始处理,将左叶子节点的值记录下来。原创 2024-06-19 20:17:53 · 207 阅读 · 0 评论 -
257、二叉树的所有路径
2、在写终止条件时,不判断是否为空节点,在找到叶子节点时就开始终止处理,这里使用vector 结构path来记录路径,所以要把vector 结构的path转为string格式,再把这个string 放进 result里。3、在单层递归逻辑里,用到了回溯的思路,递归完,要做回溯,因为path 不能一直加入节点,它还要删节点,然后才能加入新的节点。1、在递归函数传参是,用了vertor来记录路径,在之后做回溯pop的时候方便。给定一个二叉树,返回所有从根节点到叶子节点的路径。原创 2024-06-18 21:08:32 · 143 阅读 · 0 评论 -
110.平衡二叉树
是指该树所有节点的左右子树的深度相差不超过 1。可以采用递归遍历每一个节点,得到其高度,在判断高度时不可避免的要用到其左右子树的高度,所以可以顺便判断出左右子树的高度相差是否大于1,若大于1,则该节点不是平衡的,整个子树也就不是平衡的。其中对节点的左右子树高度递归判断有漏洞,因为在递归的单层逻辑里对左右两个方向都做了判断,所以int LeftHeight = GetHeight(cur->left);这一语句是正确的判断整个左子树的情况,而不是单线的左子树。给定一个二叉树,判断它是否是 平衡二叉树。原创 2024-06-15 22:54:11 · 187 阅读 · 0 评论 -
94、二叉树的迭代遍历
实现对二叉树的前后序非递归遍历,然后递归返回的时候,从栈顶弹出上一次递归的各项参数,所以这就是递归为什么可以返回上一层位置的原因。所以可以用栈的方式实现遍历。原创 2024-06-09 23:07:44 · 243 阅读 · 0 评论 -
104、二叉树的最大深度
题解:所谓深度,就是树中某节点距离根节点的距离,如图中根节点3的深度为1,那节点7的深度为3,所谓高度,就是树中某节点距离末端叶子结点的距离,如图中7的高度为1,则节点3的高度为3,。有了这个认识,那么二叉树中的最大深度其实也就是根节点的高度。虽然知道每递归一次,高度就要+1(注意此时其实计算的是根节点的高度,因为是从递到末端节点才归来逐渐加1),要注意这个1要怎么加,要与递归相联系才能累加。是指从根节点到最远叶子节点的最长路径上的节点数。确定递归函数的参数和返回值;确定单层递归的逻辑;原创 2024-06-07 19:52:13 · 189 阅读 · 0 评论 -
101、对称二叉树
先比较根节点的左右节点,若相同则开始递归遍历,比较左子树的左子树与右子树的右子树是否相等,左子树的右子树与右子树的左子树是否相等,递归完若这两条支线都相等且返回了true,则表示整个是对称的,返回true。2)if else if else if else 语句是有顺序的,从上往下依次判断,所以若没完全判断好节点是否为NULL的情况下,就不能判断节点的val。题解:要确认是否对称,其实就是要同时遍历左右两边的子树,若某一侧的某个节点与其对称的节点不同,则返回false。原创 2024-06-06 20:51:23 · 192 阅读 · 0 评论 -
226、翻转二叉树
题解:可以采用递归的方式进行翻转。前序递归:中->左->右 ,后序递归:左->右->中,中序递归不行,中序:左中右,当左边翻转完后,根节点再翻转,就把已经处理过的左边翻到右边,接着处理右边。,翻转这棵二叉树,并返回其根节点。函数在C++中用于交换两个变量的值。2、注意对传入参数异常情况的的判断;给你一棵二叉树的根节点。原创 2024-06-06 19:43:36 · 198 阅读 · 0 评论 -
102.二叉树的层序遍历
就是将每一层节点放进队列中,并记录每一层节点数量size,之后队列每弹出一个节点,就push进它的左右节点,当pop完size个节点后,队列中剩下的就是下一层的节点,这时再次记录size,进行下一层的遍历。所谓层序遍历就是从左往右一层一层的遍历二叉树,并把每一层放进一个数组中,最终输出一个二维数组。是C++标准模板库(STL)中用于获取容器中元素数量的方法。3、需要注意的是本题中放入队列的是二叉树节点,是包含指向左右子节点的指针和自身val的结构。,用于将元素添加到容器的特定位置(通常是末尾或顶端)。原创 2024-05-20 23:19:42 · 253 阅读 · 0 评论 -
Leetcode--有效的括号
定义一个栈,从字符串第一个括号开始遍历,如果遍历到左括号,则在栈中push进一个对应的右括号,方便之后栈元素和字符串对比,如果遍历到右括号则在栈中判断top是否为对应的左括号,不是则异常(对应第二种情况)或栈为空也异常(对应第三种情况)。遍历结束栈不为空也异常(对应第一种情况)。(注:小技巧,可以先判断字符串长度是否为奇数,奇数一定异常)解题:题意也就是让判断一个字符串s是否符合正常语法。共有三种不匹配的情况。原创 2024-03-28 22:22:11 · 138 阅读 · 0 评论