- 博客(103)
- 资源 (3)
- 收藏
- 关注
原创 二叉树的最小绝对差
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。差值是一个正数,其数值等于两值之差的绝对值。解题思路:利用二叉搜索树的中序遍历是一个有序的数组,转化为数组。在数组中找相邻两个元素的差绝对值最小。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeN
2022-01-16 19:27:58 255
原创 98验证二叉搜索树
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。解题思路:有效的二叉搜索树,中序遍历是从小到大的有效数组,因此可以中序遍历将二叉搜索树转换为数组,通过数组是否有序来判断是否是二叉搜索树。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(
2022-01-16 19:16:44 274
原创 700二叉搜索树中的搜索
给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。解题思路:二叉搜索树按照节点左子树节点的值小于根节点的值右子树节点的值大于根节点的值。递归需要直接返回访问到的根节点,因此在递归的时候加入renturn,如果找完之后没有找到节点直接返回NULL/** * Definition for a binary tree node. * struct TreeNode { * int val; *
2022-01-12 23:39:22 185
原创 617. 合并二叉树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/merge-two-binary-trees著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题思路:两个二叉树的合并。将根节点合并在分别
2022-01-12 23:17:07 69
原创 113二叉树的路径综合2
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/path-sum-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题思路:本题与112题极其相似只需要在递归终止的时候增加两个数组来将符合条件的值装入数组中其他逻辑相同。/** * Definition fo
2022-01-11 20:45:06 189
原创 112路径总和
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点 是指没有子节点的节点。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/path-sum著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题思路:从根节点由上到下访问,采用先序遍历的顺
2022-01-11 20:22:57 76
原创 513找树左小角的值
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。解题思路:层序遍历找最深层的节点,用一个变量记录最后一个节点的值。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullpt
2022-01-08 22:37:48 91
原创 257二叉树的所有路径
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。解题思路:递归加回溯–使用前序遍历遍历到叶节点回溯。递归三部曲1.确定递归函数的返回值和参数每次调用的参数,每次传参需要将当前调用的节点,数组和最终返回结果传入,函数没有返回值。2.什么时候截止呢,是当 cur不为空,其左右孩⼦都为空的时候,就找到叶⼦节点。3.单层逻辑,二叉树左子树右子树递归。直到访问到叶子节点返回,说明一条路径已经查找结束,退出当前节点。回溯和递归是⼀⼀对应的,有⼀个递归,就要有⼀个回溯
2022-01-08 20:01:59 597
原创 110平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。解题思路:判断平衡二叉树直接定义判断左子树平衡右子树平衡,左右子树高度差平衡。使用递归三部曲1.确定递归的参数和返回值:递归参数是每层的节点,返回值是当前节点的深度2.终止条件:节点为空3.递归的单层逻辑:用定义去判断二叉树是否平衡/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * Tr
2022-01-06 21:41:57 498
原创 559N叉树的最大深度
给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-depth-of-n-ary-tree著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解体思路:N叉树的最大深度与二叉树的思路一样可使用递归或者层序遍历。递归需要判断每层的分支树和最大的深度进行比
2022-01-06 20:17:46 66
原创 101对称二叉树
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。1/ 2 2/ \ / 3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:1/ 2 2\ 3 3解题思路:对称二叉树需要考虑到左子树和的左节点和右子树的右节点是否对称,使用递归三部曲来解题1.确定递归参数和函数返回值(每次调用调用参数是左右节点,函数返回值是true或者false)2.终止条件就应该分类讨论当左节点为空
2022-01-05 20:07:46 480
原创 Leecode117填充每一个二叉树节点的右侧指针
给定一个二叉树struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-nod
2022-01-05 19:30:45 287
原创 Leecode116填充每一个右侧节点的指针
题目描述:给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。来源:力扣(LeetCode)链接:https://leetcode-cn.com/proble
2022-01-05 19:16:26 82
原创 Qt基础入门
Qt快捷键的使用:1.F1查看帮助文档2.F4同名.h和.cpp之间的切换QPushbutton常用的API1.设置父本 SetParent2.移动 move3.设置文字setText4.重新设置窗口resize5.固定窗口大小setFixedSize6.设置窗口标题setWindowText...
2022-01-03 19:51:46 852 1
原创 Leecode在每个树中寻找最大值
给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。//解体思路:标准的层序遍历,只需要在按照层输出的时候记录一下当前层的最大值,将每次的最大值加入到Vector容器中```cpp /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0),
2022-01-03 19:02:01 100
原创 242. 有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = “anagram”, t = “nagaram”输出: true示例 2:输入: s = “rat”, t = “car”输出: false说明:你可以假设字符串只包含小写字母。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-anagram著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路:使
2021-01-14 23:08:19 88
原创 反转链表
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL思路:使用快慢指针,快指针指向慢指针。class Solution {public: ListNode* reverseList(ListNode* head) { ListNode *cur=NULL,* pre=head; while(pre!=NULL)
2020-12-07 15:55:27 78
原创 环形链表二
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。进阶:你是否可以使用 O(1) 空间解决此题?示例 1:输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点解释:链表中有一个环,其尾部连接到
2020-12-06 11:09:01 80
原创 环形链表
给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?示例 1:输入:head = [3,2,0,-4],
2020-12-06 10:45:34 122
原创 删除链表中的重复元素(2)
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->3来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii著作权归领扣网络
2020-12-06 10:06:42 130
原创 全排列
给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/permutations著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。class Solution {public:vector<int>tmp;vec
2020-12-02 16:47:51 60
原创 组合总和2
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,所求解集为:[[1, 7],[1, 2, 5],[2, 6],[1, 1, 6]]示例 2:输入: candidate
2020-12-01 21:27:19 68
原创 组合总和
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入:candidates = [2,3,6,7], target = 7,所求解集为:[[7],[2,2,3]]示例 2:输入:candidates = [2,3,5], target = 8,所求
2020-12-01 20:44:39 95
原创 乘积最大数组
给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-product-subarray著作权归领扣网络所
2020-11-29 10:45:10 423
原创 数组掌握的理论知识
数组是存放在连续内存空间上的相同类型的数据集合。注意:数组下标是从0开始,且是连续的。正因为是连续的在删除或者添加元素时候,难免要移动其他元素的地址。比如,当我们要删除下表是3的元素,需要对下表为3的元素后面进行移动操作。因此数组不适合做频繁的增删操作。二维数组在空间内是连续的吗?是。二维数组是属于一维数组的,数组名代表元素的首地址。...
2020-11-26 11:39:15 159
原创 完全二叉树的节点个数
给出一个完全二叉树,求出该树的节点个数。说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。示例:输入:1/ 2 3/ \ /4 5 6输出: 6来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/count-complete-tree-nodes著作权归领扣网络所有。商业转
2020-11-25 15:05:55 1607
原创 平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。//使用后序遍历(左右根)判断当前节点的左右子树之差是否超过1,如果超过1直接返回false/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * T
2020-11-25 14:47:48 89
原创 N叉树的层序遍历
给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。例如,给定一个 3叉树 :返回其层序遍历:[[1],[3,2,4],[5,6]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路:层序遍历,不是向队列中插入该节点的左右子树,是插入该节点的孩子。/*// Definition
2020-11-21 10:21:48 240
原创 二叉树的层平均值
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。示例 1:输入:3/ 9 20/ 15 7输出:[3, 14.5, 11]解释:第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/average-of-levels-in-binary-tree著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注
2020-11-21 09:55:51 235
原创 二叉树的右视图
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释:1 <—/ 2 3 <—\ 5 4 <—来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-right-side-view著作权归领扣网络所
2020-11-21 09:42:22 105
原创 填充每个节点的下一个右侧节点指针
给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。示例:输入:{“KaTeX parse error: Expected '}', got 'EOF' at en
2020-11-21 09:21:09 97
原创 二叉树展开为链表
给定一个二叉树,原地将它展开为一个单链表。例如,给定二叉树1/ 2 5/ \ 3 4 6将其展开为:123456来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路:前序遍历将树分为左子树和右子树将右子树右子树连接在左子树的右侧树的左子树连接在树的右侧
2020-11-19 19:42:50 128
原创 路径总和(2)
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:[[5,4,11,2],[5,8,4,5]]来源:力扣(LeetCode)链接:https://le
2020-11-19 14:51:00 152
原创 从前序与中序构造二叉树
根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:3/ 9 20/ 15 7来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal著作权归领扣
2020-11-14 10:32:49 513
原创 二叉树的锯齿形遍历
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回锯齿形层次遍历如下:[[3],[20,9],[15,7]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal著作权归领扣网
2020-11-14 08:43:06 431
原创 二叉树的层次遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其层次遍历结果:[[3],[9,20],[15,7]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出
2020-11-12 14:21:28 109
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人