leetcode刷题/二叉树
文章平均质量分 60
公仔面i
这个作者很懒,什么都没留下…
展开
-
leetcode刷题/二叉树 538. 把二叉搜索树转换为累加树
538. 把二叉搜索树转换为累加树题意:给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。示例 1:输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]原创 2021-08-07 21:13:39 · 150 阅读 · 0 评论 -
leetcode刷题/二叉树 450. 删除二叉搜索树中的节点
450. 删除二叉搜索树中的节点题意:给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。示例:root = [5,3,6,2,4,null,7]key = 3 5 / \ 3 6 / \ \2 4 7给定需要删除的节点值是 3,所以我们首先找到 3 这原创 2021-08-05 16:30:44 · 67 阅读 · 0 评论 -
leetcode刷题/二叉树 701. 二叉搜索树中的插入操作
701. 二叉搜索树中的插入操作题意:给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。示例 1:输入:root = [4,2,7,1,3], val = 5输出:[4,2,7,1,3,5]解释:另一个满足题目要求可以通过的树是:示例 2:输入:root = [40原创 2021-08-04 13:22:57 · 84 阅读 · 0 评论 -
leetcode刷题/二叉树 235. 二叉搜索树的最近公共祖先
235. 二叉搜索树的最近公共祖先题意:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2原创 2021-08-04 13:21:59 · 94 阅读 · 0 评论 -
leetcode刷题/二叉树 236. 二叉树的最近公共祖先
236. 二叉树的最近公共祖先题意:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例 1:输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3 。示例 2:输入:root原创 2021-08-04 13:21:05 · 72 阅读 · 0 评论 -
leetcode刷题/二叉树 501. 二叉搜索树中的众数
501. 二叉搜索树中的众数题意:给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。假定 BST 有如下定义:结点左子树中所含结点的值小于等于当前结点的值结点右子树中所含结点的值大于等于当前结点的值左子树和右子树都是二叉搜索树例如:给定 BST [1,null,2,2], 1 \ 2 / 2返回[2].题意:这道题还是利用中序遍历,因为中序遍历相当于遍历一遍有序数组.然后找出里面最多的数即可原创 2021-08-04 12:47:53 · 85 阅读 · 0 评论 -
leetcode刷题/二叉树 530. 二叉搜索树的最小绝对差
530. 二叉搜索树的最小绝对差题意:给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。示例:输入: 1 \ 3 / 2输出:1解释:最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。解题思路:问答如何获取最小值?因为题目说明没有负值,只需要找到两个最接近的值相减的结果就是最小值如何找到最接近的两个值?中序遍历 可以让二叉树从小到大排列,那么最接近的两原创 2021-08-02 19:10:35 · 66 阅读 · 0 评论 -
leetcode刷题/二叉树 98. 验证二叉搜索树
98. 验证二叉搜索树题意:给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。原创 2021-08-02 19:10:00 · 77 阅读 · 0 评论 -
leetcode刷题/二叉树 700. 二叉搜索树中的搜索
700. 二叉搜索树中的搜索题意:给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。例如,给定二叉搜索树: 4 / \ 2 7 / \ 1 3和值: 2你应该返回如下子树: 2 / \ 1 3在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL原创 2021-08-02 19:09:19 · 184 阅读 · 0 评论 -
leetcode刷题/二叉树 一招鲜吃下大部分构造二叉树
一招鲜吃下大部分构造二叉树105. 从前序与中序遍历序列构造二叉树示例 1:Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]Output: [3,9,20,null,null,15,7]示例 2:Input: preorder = [-1], inorder = [-1]Output: [-1]解题思路:本体的解题思路如下:前序数组的第一个元素就为根,根据这个根在中序数组分为左右数组.就是左子树和右子树.前序数组原创 2021-08-01 23:44:05 · 95 阅读 · 0 评论 -
leetcode刷题/二叉树 112. 路径总和
112. 路径总和题意:给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true示例 2:输入:root = [1,2,3], targetSum = 5输出:false原创 2021-07-31 13:04:42 · 217 阅读 · 0 评论 -
leetcode刷题/二叉树 513. 找树左下角的值
513. 找树左下角的值题意:给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。示例 1:输入: root = [2,1,3]输出: 1示例 2:输入: [1,2,3,4,null,5,6,null,null,7]输出: 7解题思路:问答题意获取最后一层的节点中最左边的节点怎么获取最后一层?层序遍历怎么获取最后一层最左边节点?最后一层的第一个节点.到这里就已经完成本题,原创 2021-07-31 11:00:02 · 200 阅读 · 0 评论 -
leetcode刷题/二叉树 404. 左叶子之和
404. 左叶子之和题意:计算给定二叉树的所有左叶子之和。示例: 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24解题思路:问答题意找出所有的左叶子(不是左孩子)节点然后相加即可如何找出左叶子?判断当前节点的左节点为叶子节点,即可说明当前节点的左节点为左叶子(递归终止条件).如何获得结果?先定义一个count用来返回结果,如果是叶子节点就让count加原创 2021-07-31 00:14:24 · 112 阅读 · 0 评论 -
leetcode刷题/二叉树 572. 另一棵树的子树
572. 另一棵树的子树给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。示例 1:输入:root = [3,4,5,1,2], subRoot = [4,1,2]输出:true示例 2:输入:root = [3,4,5,1,2,null,null原创 2021-07-30 21:48:33 · 233 阅读 · 0 评论 -
leetcode刷题/二叉树 257. 二叉树的所有路径(DFS)
257. 二叉树的所有路径(DFS)题意:给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。示例:输入: 1 / \2 3 \ 5输出: ["1->2->5", "1->3"]解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3解题思路:经典的递归问题问答确定返回条件这道题需要找的是到叶子节点的路径,所有到叶子节点就需要放回什么时候到叶子原创 2021-07-28 21:57:48 · 120 阅读 · 0 评论 -
leetcode刷题/二叉树 110. 平衡二叉树
110. 平衡二叉树题意:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。示例 1:输入:root = [3,9,20,null,null,15,7]输出:true示例 2:输入:root = [1,2,2,3,3,null,null,4,4]输出:false示例 3:输入:root = []输出:true解题思路:需要先了解平衡树概念,就是单曲节点的左节点和右原创 2021-07-27 09:09:57 · 115 阅读 · 0 评论 -
leetcode刷题/二叉树 222. 完全二叉树的节点个数
222. 完全二叉树的节点个数题意:给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。示例 1:输入:root = [1,2,3,4,5,6]输出:6示例 2:输入:root = []输出:0示例 3:输入:root = [1]输出:1解题思路:第一种:原创 2021-07-26 23:35:29 · 111 阅读 · 0 评论 -
leetcode刷题/二叉树 二叉树的深度
二叉树的深度104. 二叉树的最大深度题意:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7解题思路:运用递归,只需要逐个判断每个节点的层数的最大值即可代码: if (root == nullptr) return 0; return max(m原创 2021-07-26 23:13:44 · 237 阅读 · 0 评论 -
leetcode刷题/二叉树 101. 对称二叉树
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解题思路:脑回路:问答什么是对称?左子树节点的左孩子全部等于右子树的右孩子如何判断对称?每次都取相应原创 2021-07-26 12:01:17 · 138 阅读 · 0 评论 -
leetcode刷题/二叉树 226. 翻转二叉树
226. 翻转二叉树题意:翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1解题思路:这道题只需要遍历全部的节点然后交换它的两个孩子节点即可.我使用的是层序遍历,套入模板即可.唯一注意的就是不能使用中序,因为根据左中右的顺序,左边先交换,然后中间节点交换后,左节点变成右节点,这样就等于左节点交换了两次,右原创 2021-07-25 18:33:22 · 96 阅读 · 0 评论 -
leetcode刷题/二叉树 102. 二叉树的层序遍历
102. 二叉树的层序遍历题意:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层序遍历结果:[ [3], [9,20], [15,7]]解题思路:这道题用迭代做,需要用到队列来做辅助.难点在于怎么知道这个点属于那一层的.先压入根节点,然后结果添加第一个节点的值为第一个数组,原创 2021-07-25 18:11:54 · 222 阅读 · 1 评论 -
leetcode刷题/二叉树 二叉树的前序,中序,后序遍历(迭代)
二叉树的前序,中序,后序遍历(迭代)94. 二叉树的中序遍历144. 二叉树的前序遍历145. 二叉树的后序遍历题意:给你二叉树的根节点 root ,返回它节点值的 前序 ,中序,后序遍历。解题思路前序遍历:需要利用栈,先把根节点压入栈顶.循环体内,获取站点节点,弹出栈顶节点.如果该节点有孩子节点,先压入右孩子.在压入左孩子(因为栈顶是后进先出,右孩子在底下可以慢弹出)循环直到栈为空.代码:class Solution {public: vector<i原创 2021-07-25 17:21:11 · 196 阅读 · 0 评论 -
leetcode刷题/二叉树 二叉树的前序,中序,后序遍历(递归)
二叉树的前序,中序,后序遍历94. 二叉树的中序遍历144. 二叉树的前序遍历145. 二叉树的后序遍历题意:给你二叉树的根节点 root ,返回它节点值的 前序 ,中序,后序遍历。解题思路:二叉树的遍历,利用了递归,只是修改了压入数组的位置即可.代码:1.前序:class Solution {public: void VLR(TreeNode *root, vector<int> &res) { if (root == nu原创 2021-07-23 23:51:50 · 149 阅读 · 0 评论