
Leecode
Ao_Richard
个人学习理解笔记
展开
-
51、回溯之N皇后
1、棋盘的生成std::vector<std::string> chessboard(n, std::string(n, '.'));创建一个n×n的棋盘。3、终止条件的判断,棋盘是n行的,为回溯函数传入的行数是从0开始,所以当行数row==n时,就将棋盘放入result中,结束返回。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。原创 2024-07-17 10:35:46 · 252 阅读 · 0 评论 -
77、组合
题解:组合问题其实可以暴力求解,用for循环嵌套,但在此题中如果k的值很大,那就需要多层嵌套,求解困难。原创 2024-07-08 15:49:03 · 287 阅读 · 0 评论 -
450、删除二叉搜索树中的节点
是 C++11 引入的一种关键字,用于自动推导变量的类型。编译器会根据变量的初始化表达式来推断变量的类型。对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。中通过递归返回值来加入新节点, 这里也可以通过递归返回值删除节点。遇到空返回,其实这也说明没找到删除的节点,遍历到空节点直接返回了。1)对单层递归逻辑即找到key值时的五种情况的分析。这里就把二叉搜索树中删除节点遇到的情况都搞清楚。节点的右子节点赋值给一个自动类型推导的变量。给定一个二叉搜索树的根节点。原创 2024-07-04 22:02:19 · 267 阅读 · 0 评论 -
501、二叉搜索树中的众数
所以其实不用遍历两遍:先遍历一遍找到长度最大的,再遍历一遍符合把这个长度val输出。先设立一个maxCount值,并从一开始就将符合的值放进去,之后动态的改变maxCount,当遍历得到的count比现在的maxcount更大时,就更新maxcount,并且把之前放进reslut的值都清空,把新的放进去。要点:重点在单层逻辑的处理中,因为是搜索树,所以按照中序遍历的话节点的值是递增的,所以形象化的可以将二叉树想成一段一段递增的数列,要找到众数,就是找到哪一段或几段是最长的。,找出并返回 BST 中的所有。原创 2024-07-01 22:24:32 · 428 阅读 · 0 评论 -
617、合并二叉树
想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;要求合并从根节点开始,那么就选择前序遍历,在tree1的基础上将tree1的节点重新修改。null 的节点将直接作为新二叉树的节点。合并过程必须从两个树的根节点开始。返回合并后的二叉树。原创 2024-06-26 19:30:32 · 197 阅读 · 0 评论 -
112、路径总和
1、注意回溯是发生在遍历完一个节点后在回溯,而不是在单层递归逻辑中,否则就相当于每次递归什么都没做。2、若采用递减判断,主函数传参传入的是减去了根节点值的目标值。的路径,这条路径上所有节点值相加等于目标和。和一个表示目标和的整数。是指没有子节点的节点。原创 2024-06-20 22:28:29 · 338 阅读 · 0 评论 -
404、左叶子之和
在递归中,在单层递归逻辑中,开始递归前决不能用ruturn来记录获得的值,否则递归就不会开始。题解:可以采用后序递归遍历的方式,先将左右子树的左叶子节点值计算出来,最后相加。当遍历到左叶子节点的父节点时就开始处理,将左叶子节点的值记录下来。原创 2024-06-19 20:17:53 · 243 阅读 · 0 评论 -
110.平衡二叉树
是指该树所有节点的左右子树的深度相差不超过 1。可以采用递归遍历每一个节点,得到其高度,在判断高度时不可避免的要用到其左右子树的高度,所以可以顺便判断出左右子树的高度相差是否大于1,若大于1,则该节点不是平衡的,整个子树也就不是平衡的。其中对节点的左右子树高度递归判断有漏洞,因为在递归的单层逻辑里对左右两个方向都做了判断,所以int LeftHeight = GetHeight(cur->left);这一语句是正确的判断整个左子树的情况,而不是单线的左子树。给定一个二叉树,判断它是否是 平衡二叉树。原创 2024-06-15 22:54:11 · 229 阅读 · 0 评论 -
94、二叉树的迭代遍历
实现对二叉树的前后序非递归遍历,然后递归返回的时候,从栈顶弹出上一次递归的各项参数,所以这就是递归为什么可以返回上一层位置的原因。所以可以用栈的方式实现遍历。原创 2024-06-09 23:07:44 · 285 阅读 · 0 评论 -
104、二叉树的最大深度
题解:所谓深度,就是树中某节点距离根节点的距离,如图中根节点3的深度为1,那节点7的深度为3,所谓高度,就是树中某节点距离末端叶子结点的距离,如图中7的高度为1,则节点3的高度为3,。有了这个认识,那么二叉树中的最大深度其实也就是根节点的高度。虽然知道每递归一次,高度就要+1(注意此时其实计算的是根节点的高度,因为是从递到末端节点才归来逐渐加1),要注意这个1要怎么加,要与递归相联系才能累加。是指从根节点到最远叶子节点的最长路径上的节点数。确定递归函数的参数和返回值;确定单层递归的逻辑;原创 2024-06-07 19:52:13 · 228 阅读 · 0 评论 -
226、翻转二叉树
题解:可以采用递归的方式进行翻转。前序递归:中->左->右 ,后序递归:左->右->中,中序递归不行,中序:左中右,当左边翻转完后,根节点再翻转,就把已经处理过的左边翻到右边,接着处理右边。,翻转这棵二叉树,并返回其根节点。函数在C++中用于交换两个变量的值。2、注意对传入参数异常情况的的判断;给你一棵二叉树的根节点。原创 2024-06-06 19:43:36 · 233 阅读 · 0 评论 -
102.二叉树的层序遍历
就是将每一层节点放进队列中,并记录每一层节点数量size,之后队列每弹出一个节点,就push进它的左右节点,当pop完size个节点后,队列中剩下的就是下一层的节点,这时再次记录size,进行下一层的遍历。所谓层序遍历就是从左往右一层一层的遍历二叉树,并把每一层放进一个数组中,最终输出一个二维数组。是C++标准模板库(STL)中用于获取容器中元素数量的方法。3、需要注意的是本题中放入队列的是二叉树节点,是包含指向左右子节点的指针和自身val的结构。,用于将元素添加到容器的特定位置(通常是末尾或顶端)。原创 2024-05-20 23:19:42 · 291 阅读 · 0 评论 -
Leetcode--有效的括号
定义一个栈,从字符串第一个括号开始遍历,如果遍历到左括号,则在栈中push进一个对应的右括号,方便之后栈元素和字符串对比,如果遍历到右括号则在栈中判断top是否为对应的左括号,不是则异常(对应第二种情况)或栈为空也异常(对应第三种情况)。遍历结束栈不为空也异常(对应第一种情况)。(注:小技巧,可以先判断字符串长度是否为奇数,奇数一定异常)解题:题意也就是让判断一个字符串s是否符合正常语法。共有三种不匹配的情况。原创 2024-03-28 22:22:11 · 164 阅读 · 0 评论