LeetCode
xiao1guaishou
这个作者很懒,什么都没留下…
展开
-
LeetCode 111. 二叉树的最小深度
题目:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最小深度 2.解题思路方法一:利用层次遍历的方法。利用一个变量记录层次。遇到第一个叶子节点返回此时的层次即可。 in...原创 2019-02-16 20:59:44 · 65 阅读 · 0 评论 -
LeetCode 100. 相同的树
题目:给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1/ \ / 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 1/ 2 ...原创 2019-02-11 11:01:12 · 122 阅读 · 0 评论 -
LeetCode 538. 把二叉搜索树转换为累加树
题目:给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。例如:输入: 二叉搜索树:5/ 2 13输出: 转换为累加树:18/ 20 13解题思二叉搜索树的中序遍历会产生一个由小到大的值序列。而逆中序遍历会 产生一个由大 到小的值序...原创 2019-02-11 12:24:33 · 123 阅读 · 0 评论 -
LeetCode 404. 左叶子之和
题目:计算给定二叉树的所有左叶子之和。示例:3/ 9 20/ 15 7在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24解题思路递归法:递归出口:节点为空,返回;左孩子,将其值压入结果向量一般:将根的左子树中的所有左孩子压入结果向量,将根的右子树中的所有左孩子压入结果向量代码实现 vector<int> sum(TreeNo...原创 2019-02-11 18:06:13 · 158 阅读 · 0 评论 -
LeetCode 590. N叉树的后序遍历
题目:给定一个 N 叉树,返回其节点值的后序遍历。-解题思路方法一:递归法代码实现: vector<int> res; vector<int> postorder(Node* root) { if(!root) return res; else { for...原创 2019-02-17 19:27:16 · 90 阅读 · 0 评论 -
LeetCode 235. 二叉搜索树的最近公共祖先
题目:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root =...原创 2019-02-17 23:27:02 · 109 阅读 · 0 评论 -
LeetCode 897. 递增顺序查找树
题目:给定一个树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。解题思路方法一:将中序遍历的节点的值递归存储入数组中,再只用将这些节点链接成一个只有右孩子的单支树代码实现: vector<int> res; vector<int> mid(TreeNode* root) { ...原创 2019-02-18 00:15:26 · 171 阅读 · 0 评论 -
LeetCode 654. 最大二叉树
题目:给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个树的根节点。Example 1:输入: [3,2,1,6,0,5]输入: 返回下面这棵树的根节点: 6/ \3...原创 2019-02-18 17:31:17 · 262 阅读 · 0 评论 -
LeetCode 637. 二叉树的层平均值
题目:给定一个非空二叉树, 返回一个由每层节点平均值组成的数组.示例 1:输入:3/ 9 20/ 15 7输出: [3, 14.5, 11]解释:第0层的平均值是 3, 第1层是 14.5, 第2层是 11. 因此返回 [3, 14.5, 11].注意:节点值的范围在32位有符号整数范围内。解题思路利用辅助栈,按照层次遍历的顺序将节点依次压入栈中。并...原创 2019-02-10 22:30:21 · 91 阅读 · 0 评论 -
LeetCode 872. 叶子相似的树
题目:请考虑一颗二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。举个例子,如上图所示,给定一颗叶值序列为 (6, 7, 4, 9, 8) 的树。如果有两颗二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。如果给定的两个头结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false 。提示:给定的两颗树可能会有 1 ...原创 2019-02-10 22:26:58 · 146 阅读 · 0 评论 -
LeetCode 429. N叉树的层序遍历
题目给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其自底向上的层次遍历为:[[15,7],[9,20],[3]]解题思路先借助辅助队列,将每一层元素存储入vector中,然后在借助一个vecto...原创 2019-02-08 21:59:30 · 836 阅读 · 0 评论 -
LeetCode 513. 找树左下角的值
题目:给定一个二叉树,在树的最后一行找到最左边的值。示例 1:输入:2/ 1 3输出:1示例 2:输入: 1 / \ 2 3 / / \4 5 6 / 7输出:7解题思路首先计算出树的深度,然后利用层次遍历,将最后一行压入到队列中,再直接返回队顶元素即可。代码实现:int deep(TreeNode* ...原创 2019-02-21 18:45:03 · 111 阅读 · 0 评论 -
LeetCode 230. 二叉搜索树中第K小的元素
题目:给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。示例 1:输入: root = [3,1,4,null,2], k = 13/ 1 42输出: 1示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 35/ ...原创 2019-02-21 19:25:01 · 76 阅读 · 0 评论 -
LeetCode 921. 使括号有效的最少添加
题目:给定一个由 ‘(’ 和 ‘)’ 括号组成的字符串 S,我们需要添加最少的括号( ‘(’ 或是 ‘)’,可以在任何位置),以使得到的括号字符串有效。从形式上讲,只有满足下面几点之一,括号字符串才是有效的:它是一个空字符串,或者它可以被写成 AB (A 与 B 连接), 其中 A 和 B 都是有效字符串,或者它可以被写作 (A),其中 A 是有效字符串。给定一个括号字符串,返回...原创 2019-01-30 12:33:31 · 166 阅读 · 0 评论 -
LeetCode 94. 二叉树的中序遍历
题目:给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]12/3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?解题思路1.递归法代码实现(C++)public: vector<int> inorderTraversal(TreeNode* root) { vector<int...原创 2019-01-30 14:03:20 · 79 阅读 · 0 评论 -
LeetCode 144. 二叉树的前序遍历
题目给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,null,2,3]12/3输出: [1,2,3]进阶: 递归算法很简单,你可以通过迭代算法完成吗?解题思路1.递归法代码实现(C++) vector<int>list; vector<int> preorderTraversal(TreeNode* root) { ...原创 2019-01-30 14:15:28 · 60 阅读 · 0 评论 -
LeetCode 669. 修剪二叉搜索树
题目:给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。示例 1:输入:1/ 0 2L = 1R = 2输出:12示例 2:输入:3/ 0 42/1L = 1R = 3输出:3/...原创 2019-02-09 23:47:52 · 134 阅读 · 0 评论 -
LeetCode 543. 二叉树的直径
题目:给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。注意:两结点之间的路径长度是以它们之间边的数目表示。解题思路...原创 2019-02-16 16:07:29 · 4014 阅读 · 2 评论 -
LeetCode 88. 合并两个有序数组
题目:给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums...原创 2019-02-28 11:08:39 · 55 阅读 · 0 评论 -
LeetCode 106. 从中序与后序遍历序列构造二叉树
题目根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树:3/ 9 20/ 15 7解题思路参考:https://blog.csdn.net/yuanliang861/article/de...原创 2019-02-24 10:10:32 · 75 阅读 · 0 评论 -
LeetCode 105. 从前序与中序遍历序列构造二叉树
题目:根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:解题思路二叉树前序遍历为根左右二叉树中序遍历为左根右根据二叉树的前序遍历序列在中序遍历序列中找到根节点的位置,并求出根左右序列的长度,在递归构造...原创 2019-02-24 10:43:05 · 91 阅读 · 0 评论 -
LeetCode 117. 填充每个节点的下一个右侧节点指针 II
题目:给定一个二叉树struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。示例:解释:给定二叉树如图 A 所示,你的函数应该填充它的每...原创 2019-03-06 11:15:40 · 331 阅读 · 0 评论 -
LeetCode 905. 按奇偶排序数组
题目:给定一个非负整数数组 A,返回一个由 A 的所有偶数元素组成的数组,后面跟 A 的所有奇数元素。你可以返回满足此条件的任何数组作为答案。示例:输入:[3,1,2,4]输出:[2,4,3,1]输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。解题思路利用快速排序中的划分方法即可代码实现: vector<int> sort...原创 2019-03-03 20:42:45 · 62 阅读 · 0 评论 -
LeetCode 145. 二叉树的后序遍历
题目:给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3]12/3输出: [3,2,1]解题思路1.递归法递归出口: 若为空,则返回一般情况: 遍历左子树,遍历右子树,将元素值压入数组代码实现:方法一:vector<int> res; vector<int> postorderTraversal(Tre...原创 2019-03-04 09:40:56 · 124 阅读 · 0 评论 -
LeetCode 104 二叉树的最大深度
题目:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。解题思路:1.自顶向下递归:代码实现: int res = 0; int maxDepth(TreeNode* root) { ...原创 2019-03-04 10:14:08 · 95 阅读 · 0 评论 -
LeetCode 116. 填充每个节点的下一个右侧节点指针
题目:给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 N...原创 2019-03-08 09:47:41 · 77 阅读 · 0 评论 -
LeetCode 236. 二叉树的最近公共祖先
题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,...原创 2019-03-17 20:23:38 · 131 阅读 · 0 评论 -
LeetCode 173. 二叉搜索树迭代器
题目:实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。调用 next() 将返回二叉搜索树中的下一个最小的数。示例:BSTIterator iterator = new BSTIterator(root);iterator.next(); // 返回 3iterator.next(); // 返回 7iterator.hasNext(); // 返...原创 2019-03-18 15:23:07 · 98 阅读 · 0 评论 -
LeetCode 852
题目:我们把符合下列属性的数组 A 称作山脉:A.length >= 3存在 0 < i < A.length - 1 使得A[0] < A[1] < … A[i-1] < A[i] > A[i+1] > … > A[A.length - 1]给定一个确定为山脉的数组,返回任何满足 A[0] < A[1] < … A...原创 2019-04-07 23:21:41 · 95 阅读 · 0 评论 -
LeetCode 169. 求众数
题目:给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2解题思路由于众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素,设置一个计数器count,若遇到相同的元素则加一,否...原创 2019-02-27 10:06:12 · 143 阅读 · 0 评论 -
LeetCode 136. 只出现一次的数字
题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4解题思路题目要求用O(n)时间复杂度,O(1)空间复杂度来查找只出现一次的元素。在查看讨论之后才知道可...原创 2019-02-27 09:05:07 · 63 阅读 · 0 评论 -
LeetCode 114. 二叉树展开为链表
题目:给定一个二叉树,原地将它展开为链表。例如,给定二叉树展开为:解题思路在前序非递归遍历做相应的修改即可代码实现: void flatten(TreeNode* root) { stack<TreeNode*> st; if(!root) return; if(!root->lef...原创 2019-02-24 23:27:38 · 94 阅读 · 0 评论 -
LeetCode 515. 在每个树行中找最大值
题目:您需要在二叉树的每一行中找到最大的值。示例:输入: 1 / \ 3 2 / \ \ 5 3 9 输出: [1, 3, 9]解题思路层次遍历,找出每行的最大值即可。代码实现:vector<int> largestValues(TreeNode* root) { vector<...原创 2019-02-25 09:47:11 · 130 阅读 · 0 评论 -
LeetCode 125. 验证回文串
题目:给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: “A man, a plan, a canal: Panama”输出: true示例 2:输入: “race a car”输出: false解题思路1.首先将字符串中所有字符字母压入数组中。然后判断向量的长度。2若长...原创 2019-03-01 10:16:27 · 82 阅读 · 0 评论 -
LeetCode 102. 二叉树的层次遍历
题目:给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树: [3,9,20,null,null,15,7],返回其层次遍历结果:[[3],[9,20],[15,7]]解题思路方法一:利用队列来实现代码实现:vector<vector<int>> levelOrder(TreeNode* ro...原创 2019-02-25 19:15:48 · 65 阅读 · 0 评论 -
LeetCode 98. 验证二叉搜索树
题目:给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:示例 2:解题思路只用判断中序遍历前一个节点的值是否都小于后一个节点的值。方法一:代码实现: vector<bool> res;...原创 2019-02-26 12:51:14 · 60 阅读 · 0 评论 -
LeetCode 993. 二叉树的堂兄弟节点
题目:在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。如果二叉树的两个节点深度相同,但父节点不同,则它们是一对堂兄弟节点。我们给出了具有唯一值的二叉树的根节点 root,以及树中两个不同节点的值 x 和 y。只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true。否则,返回 false。解题思路方法一:基于层次遍历,每层设置标志...原创 2019-02-20 21:56:35 · 449 阅读 · 0 评论 -
LeetCode 101. 对称二叉树
题目:给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:解题思路递归法: bool isSymmetric(TreeNode* root) { return issimilar(root, root); } bool i...原创 2019-03-05 19:53:40 · 93 阅读 · 0 评论 -
LeetCode 112. 路径总和
题目:给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ 7...原创 2019-03-06 10:16:19 · 89 阅读 · 0 评论 -
LeetCode 450. 删除二叉搜索树中的节点
题目:给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。说明: 要求算法时间复杂度为 O(h),h 为树的高度。root = [5,3,6,2,4,null,7]key = 3 ...原创 2019-07-29 20:59:40 · 104 阅读 · 0 评论