
递归
文章平均质量分 52
answer_yym
且随疾风前行
展开
-
超级平方,快速幂
你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。示例 1:输入:a = 2, b = [3]输出:8示例 2:输入:a = 2, b = [1,0]输出:1024来源:力扣(LeetCode)链接:著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2、关键字平方3、思路快速幂4、notes1、一个公式:(a * b) % k = [(a % k) * (b % k)] % k2、快速幂mypow(i原创 2021-12-05 16:21:59 · 894 阅读 · 0 评论 -
扁平化多级链表(孩纸串提上来,搞成一层)
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。示例 1:输入:head = [1,2,3,4,5,6,null,null,null,7,8,9,10,null,null,11,12]输出:[1,2,3,7原创 2021-09-24 20:21:09 · 191 阅读 · 0 评论 -
判断子树结构
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A: 3/ \4 5/ 1 2给定的树 B:4/1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。示例 1:输入:A = [1,2,3], B = [3,1]输出:false来源:力扣(LeetCode)链接:原创 2021-09-02 09:57:07 · 109 阅读 · 0 评论 -
求二叉树的最大、最小深度
1、描述输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。例如:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最大深度 3来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/er-cha-shu-de-shen-du-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2、关原创 2021-05-21 17:54:02 · 223 阅读 · 0 评论 -
汉诺塔递归练习
1、汉诺塔3个塔,n个盘子2、关键字,汉诺塔3、思路递归3步骤:1、结束条件2、当前一层搞啥3、递归调用下一层因为有A中有n个盘子,需要转到C中。就通过递归实现。1、递归先写结束条件:当A中只有一个的时候( n == 1)直接把A中的盘子搞到C上,就可以了。2、当前层干的事:然后调用递归:A调用递归函数:通过C把上面的n-1个盘子转到B上。再把A中最底下的那个转到C上。3、递归下一层:之后就变成了把B上n-1个盘子转到C上的问题。再次调用move(n-1,B,A,C)函数就可以原创 2021-08-26 09:55:20 · 144 阅读 · 0 评论 -
找出所有子集的异或总和再求和
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述找出所有子集的异或总和再求和一个数组的 异或总和 定义为数组中所有元素按位 XOR 的结果;如果数组为 空 ,则异或总和为 0 。例如,数组 [2,5,6] 的 异或总和 为 2 XOR 5 XOR 6 = 1 。给你一个数组 nums ,请你求出 nums 中每个 子集 的 异或总和 ,计算并返回这些值相加之 和 。注意:在本题中,元素 相同 的不同子集应 多次 计数。数组 a 是数组 b 的一个 子集 的前提条件原创 2021-08-19 21:49:36 · 666 阅读 · 0 评论 -
二叉树遍历(递归前中后+非递归前中后+层序)
1、二叉树递归遍历1.1、先序(根左右)链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullpt原创 2021-08-18 10:02:50 · 122 阅读 · 0 评论 -
二叉树中第二小的节点
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。更正式地说,root.val = min(root.left.val, root.right.val) 总成立。给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。来源:力扣(LeetCode)链接著作权归领扣网络所原创 2021-07-27 10:22:03 · 192 阅读 · 0 评论 -
重建二叉树
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。链接2、关键字二叉树,重建,前序和中序,没有重复的数字,3、思路1、根据前序知道第一个元素是根,2、根据根节点去中序遍历序列中分出左右子树,3、根据第2步中分出的两部分,再看前序遍历寻找左右子树的根节点,形成递归把前序遍历搞成自己内部的重开一个vector,把中序遍历搞成一个字典,方便原创 2021-07-13 19:49:15 · 93 阅读 · 0 评论 -
二叉搜索树构建双向链表
文章目录1、描述2、关键字3、思路4、notes5、code1、描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。为了让您更好地理解问题,以下面的二叉搜索树为例来源:力扣(LeetCode)链接著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2、关键字二叉搜索树,双向链表3、思路有序,需要中序遍历,想到中序遍历的递归版本。如果为空就返回,第一步:调用左子树第二步:处理第3步:调用右子树//原创 2021-06-13 22:06:51 · 204 阅读 · 0 评论 -
无序二叉树最近公共祖先,不太会!!!
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。来源:力扣(LeetCode)链接著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2、关键字二叉树,公共祖先二叉搜索树的最近公共祖先3、思路后序遍历,原创 2021-06-02 19:23:39 · 113 阅读 · 0 评论 -
判断二叉树是否自身对称
文章目录1.描述2.关键字3.思路4.notes5.复杂度6.code1.描述请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。2.关键字二叉树,对称,3.思路递归,判断,函数重载,左右两个孩子对称相比较4.notes再写一个左右孩子对称性相比较的函数,左孩子的左孩子,和右孩子的右孩子相比较,5.复杂度时间O(N),n是节点个数空间:O(n)退化成链表6.code/** * De原创 2021-05-24 19:44:16 · 83 阅读 · 0 评论 -
二叉搜索树的迭代器
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器:BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。boolean hasNext() 如果向指针右侧遍历存在数字,则返回 true ;否则原创 2021-04-20 09:10:09 · 318 阅读 · 0 评论 -
二叉搜索树变成链表
1、描述二叉树数据结构TreeNode可用来表示单向链表(其中left置空,right为下一个链表节点)。实现一个方法,把二叉搜索树转换为单向链表,要求依然符合二叉搜索树的性质,转换操作应是原址的,也就是在原始的二叉搜索树上直接修改。返回转换后的单向链表的头节点。注意:本题相对原题稍作改动示例:输入: [4,2,5,1,3,null,6,0]输出: [0,null,1,null,2,null,3,null,4,null,5,null,6]来源:力扣(LeetCode)链接:https://l原创 2021-03-29 22:05:27 · 755 阅读 · 0 评论 -
二叉树的坡度01
1、描述给定一个二叉树,计算 整个树 的坡度 。一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。如果没有左子树的话,左子树的节点之和为 0 ;没有右子树的话也是一样。空结点的坡度是 0 。整个树 的坡度就是其所有节点的坡度之和。来源力扣(LeetCode链接著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2、关键字二叉树,左子树右子树权值做差,每层累加3、思路递归,递归函数返回值不是void而是int,递归函数返回当前节点和左右子原创 2021-03-29 19:43:22 · 132 阅读 · 0 评论 -
判断二叉树的范围,
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。2、关键字二叉搜索树、区间3、思路dfs,先根遍历,一层一层比较当前值,递归,先写当前val,再判断左右子树4、notes递归函数,返回值写成void,然后通过一个全局变量保存结果2、给出的主函数,不能重定义全局变量,不然不是同一个变量,没有结果5、复杂度时间:O(N)节点个数空间:O(H)高度6、code原创 2021-03-29 11:08:57 · 142 阅读 · 0 评论 -
扁平化嵌套列表迭代器
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述给你一个嵌套的整型列表。请你设计一个迭代器,使其能够遍历这个整型列表中的所有整数。列表中的每一项或者为一个整数,或者是另一个列表。其中列表的元素也可能是整数或是其他列表。示例 1:输入: [[1,1],2,[1,1]]输出: [1,1,2,1,1]解释: 通过重复调用 next 直到 hasNext 返回 false,next 返回的元素的顺序应该是: [1,1,2,1,1]。来源:力扣(LeetCode)链接原创 2021-03-23 11:50:09 · 134 阅读 · 0 评论 -
路经总和002
1、描述112给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->原创 2020-07-07 11:23:34 · 530 阅读 · 0 评论 -
有序链表合并两个002
1、描述21将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->42、关键字链表,有序,合并3、思路1、构造一个新的,然后一个一个的比较,2、递归4、notes递归3要素1、终止条件当其中任一个遍历到最后就结束,把后边的直接加上来2、递归返回值:每一层递归都返回排序好的链表头3、当前层递归操作如果当原创 2020-09-24 20:05:06 · 127 阅读 · 0 评论 -
平衡二叉树001第二遍
1、描述判断平衡二叉树2、关键字二叉树3、思路平衡二叉树的定义就是左右子树的高度差小于等于1,所以判断当前节点为根节点的左右子树的高度差,从上到下递归,4、note递归3步1、 找到递归函数的传入参数,和返回值,如此题:递归函数depth,传入参数是树的节点指针,TreeNode * root,返回值是以当前节点为根节点的树的高度,下面一层再调用此递归函数时,就可以标记左右子树的高度,方便比较差值,又因为此题:如果以当前节点为根节点的树不平衡,就没有再返回树高的必要了,直接返回一个-原创 2020-08-29 17:33:20 · 104 阅读 · 0 评论 -
二叉搜索树的最近公共祖先剑指 Offer 68 - I
1、题目描述给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-原创 2020-08-21 22:55:06 · 152 阅读 · 0 评论 -
判断一棵树是否镜面对称002
1、描述101给定一个二叉树,检查它是否是镜像对称的。2、关键字二叉树、同一颗树,镜面对称,3、思路想着递归,和上一道题判断同一棵树,一样的思路,只是写成11223344这种能通过了,思路二:想着前序遍历,和后序遍历的逆,一样的时候就是镜面对称了,然后找到之前写的是多茶树,所以那个root->children没有这个参数,改着麻烦,等以后有机会再这么写吧思路三:把一颗树搞成两颗,和判断同一棵树一样的方法4、notes把函数分开写,把一棵树变成两颗5、复杂度时间:O(n)这里遍历了原创 2020-08-11 16:00:08 · 378 阅读 · 0 评论 -
判同一棵树001
1、描述100难度简单440给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1/ \ / 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 1/ 2 2 [1,2], [1,null,2]输出: fal原创 2020-08-07 21:50:57 · 157 阅读 · 0 评论 -
检查二叉平衡性001
1 描述面试0404实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3 / \4 4返回 false 。来源:力扣(LeetCode)链接原创 2020-08-06 22:28:12 · 94 阅读 · 0 评论 -
打家劫舍003
1描述337在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/house-robber-ii原创 2020-08-05 20:19:06 · 123 阅读 · 0 评论 -
二叉搜索树中的搜索001
1、描述700难度简单68给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。例如,给定二叉搜索树: 4 / \ 2 7 / \1 3和值: 2你应该返回如下子树: 2 / \ 1 3在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL。来源:力扣(LeetCode)链接:https://leetcode-c原创 2020-07-08 22:43:38 · 132 阅读 · 0 评论 -
构建最小高度树
1、描述面04.02.给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:0/ \-3 9/ /-10 5来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/minimum-height-tree-lcci著作权归领扣网络所有。商业转载原创 2020-06-14 22:06:48 · 232 阅读 · 0 评论