二叉树
文章平均质量分 51
在河之洲木水
这个作者很懒,什么都没留下…
展开
-
LeetCode 刷题 -- 236. 二叉树的最近公共祖先
中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。所有 Node.val 互不相同。p 和 q 均存在于给定的二叉树中。树中节点数目在范围 [2, 10。一个节点也可以是它自己的祖先。原创 2023-02-25 14:23:32 · 162 阅读 · 0 评论 -
LeetCode刷题系列 -- 112. 路径总和
不存在 sum = 5 的根节点到叶子节点的路径。由于树是空的,所以不存在根节点到叶子节点的路径。的路径,这条路径上所有节点值相加等于目标和。树中节点的数目在范围 [0, 5000] 内。等于目标和的根节点到叶节点路径如上图所示。(1 --> 2): 和为 3。(1 --> 3): 和为 4。和一个表示目标和的整数。是指没有子节点的节点。原创 2023-02-23 21:41:11 · 344 阅读 · 0 评论 -
LeetCode刷题系列 -- 437. 路径总和 III
不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树的节点个数的范围是 [0,1000]和等于 8 的路径有 3 条,如图所示。,求该二叉树里节点值之和等于。给定一个二叉树的根节点。原创 2023-02-06 14:47:15 · 201 阅读 · 0 评论 -
LeetCode刷题系列 -- 1457. 二叉树中的伪回文路径
在这些路径中,只有红色和绿色的路径是伪回文路径,因为红色路径 [2,3,3] 存在回文排列 [3,2,3] ,绿色路径 [2,1,1] 存在回文排列 [1,2,1]。上图为给定的二叉树。总共有 3 条从根到叶子的路径:红色路径 [2,3,3] ,绿色路径 [2,1,1] 和路径 [2,3,1]。总共有 3 条从根到叶子的路径:绿色路径 [2,1,1] ,路径 [2,1,3,1] 和路径 [2,1]。这些路径中只有绿色路径是伪回文路径,因为 [2,1,1] 存在回文排列 [1,2,1]。原创 2023-02-06 11:07:06 · 268 阅读 · 0 评论 -
LeetCode刷题系列 -- 1448. 统计二叉树中好节点的数目
好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。节点 2 -> (3, 3, 2) 不是好节点,因为 "3" 比它大。每个节点权值的范围是 [-10^4, 10^4]。节点 5 -> (3,4,5) 是路径中的最大值。节点 3 -> (3,1,3) 是路径中的最大值。节点 4 -> (3,4) 是路径中的最大值。二叉树中节点数目范围是 [1, 10^5]。的二叉树,请你返回二叉树中好节点的数目。根节点 (3) 永远是个好节点。图中蓝色节点为好节点。原创 2023-02-06 10:17:22 · 373 阅读 · 0 评论 -
LeetCode刷题系列 -- 1376. 通知所有员工所需的时间
公司总负责人想要向公司所有员工通告一条紧急消息。他将会首先通知他的直属下属们,然后由这些下属通知他们的下属,直到所有的员工都得知这条紧急消息。id = 2 的员工是公司的总负责人,也是其他所有员工的直属负责人,他需要 1 分钟来通知所有员工。名员工,每个员工的 ID 都是独一无二的,编号从。分钟后,他的所有直属下属都可以开始传播这一消息)。数组中,每个员工都有一个直属负责人,其中。返回通知所有员工这一紧急消息所需要的。名员工的直属负责人。公司总负责人是该公司的唯一一名员工。上图显示了公司员工的树结构。原创 2023-02-05 23:57:18 · 432 阅读 · 0 评论 -
LeetCode刷题系列 -- 1372. 二叉树中的最长交错路径
如果前进方向为右,那么移动到当前节点的的右子节点,否则移动到它的左子节点。蓝色节点为树中最长交错路径(左 -> 右 -> 左 -> 右)。蓝色节点为树中最长交错路径(右 -> 左 -> 右)。重复第二步和第三步,直到你在树中无法继续移动。每个节点的值在 [1, 100] 之间。每棵树最多有 50000 个节点。改变前进方向:左变右或者右变左。(单个节点的路径长度为 0 )。节点和一个方向(左或者右)。访问过的节点数目 - 1。请你返回给定树中最长。原创 2023-02-05 10:30:14 · 413 阅读 · 0 评论 -
LeetCode刷题系列 -- 1367. 二叉树中的链表
二叉树和链表中的每个节点的值都满足 1原创 2023-02-05 00:16:01 · 450 阅读 · 0 评论 -
LeetCode刷题系列 -- 1339. 分裂二叉树的最大乘积
删除红色的边,得到 2 棵子树,和分别为 11 和 10。它们的乘积是 110 (11*10)移除红色的边,得到 2 棵子树,和分别是 15 和 6。它们的乘积为 90 (15*6)请你删除 1 条边,使二叉树分裂成两棵子树,且它们子树和的乘积尽可能大。由于答案可能会很大,请你将结果对 10^9 + 7 取模后再返回。每棵树最多有 50000 个节点,且至少有 2 个节点。每个节点的值在 [1, 10000] 之间。给你一棵二叉树,它的根为。原创 2023-02-04 23:37:29 · 357 阅读 · 0 评论 -
LeetCode 刷题系列 -- 1325. 删除给定值的叶子节点
上面左边的图中,绿色节点为叶子节点,且它们的值与 target 相同(同为 2 ),它们会被删除,得到中间的图。有一个新的节点变成了叶子节点且它的值与 target 相同,所以将再次进行删除,从而得到最右边的图。的叶子节点,它的父节点就可能变成叶子节点;如果新叶子节点的值恰好也是。也就是说,你需要重复此过程直到不能继续删除。每一步都删除一个绿色的叶子节点(值为 2)。每一个节点值的范围是 [1, 1000]。每一棵树最多有 3000 个节点。,那么这个节点也应该被删除。为根的二叉树和一个整数。原创 2023-02-04 21:45:55 · 453 阅读 · 0 评论 -
LeetCode 刷题系列-- 1315. 祖父节点值为偶数的节点和
该节点的祖父节点的值为偶数。(一个节点的祖父节点是指该节点的父节点的父节点。图中红色节点的祖父节点的值为偶数,蓝色节点为这些红色节点的祖父节点。如果不存在祖父节点值为偶数的节点,那么返回。树中节点的数目在 1 到 10^4 之间。每个节点的值在 1 到 100 之间。原创 2023-02-04 21:21:38 · 81 阅读 · 0 评论 -
LeetCode 刷题系列 -- 129. 求根节点到叶节点数字之和
树中每个节点都存放有一个。例如,从根节点到叶节点的路径。计算从根节点到叶节点生成的。给你一个二叉树的根节点。是指没有子节点的节点。原创 2023-02-04 20:31:13 · 70 阅读 · 0 评论 -
LeetCode刷题系列 -- 1261. 在受污染的二叉树中查找元素
如果 treeNode.val == x 且 treeNode.right!= null,那么 treeNode.right.val == 2 * x + 2。如果 treeNode.val == x 且 treeNode.left!= null,那么 treeNode.left.val == 2 * x + 1。FindElements(TreeNode* root) 用受污染的二叉树初始化对象,你需要先把它还原。现在这个二叉树受到「污染」,所有的。请你先还原二叉树,然后实现。原创 2023-02-04 20:04:06 · 660 阅读 · 0 评论 -
LeetCode 刷题系列 -- 124. 二叉树中的最大路径和
被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中。最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42。最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6。124. 二叉树中的最大路径和 - 力扣(Leetcode)节点,且不一定经过根节点。是路径中各节点值的总和。给你一个二叉树的根节点。原创 2023-02-04 11:35:00 · 463 阅读 · 0 评论 -
LeetCode刷题系列 -- 113. 路径总和 II
路径总和等于给定目标和的路径。是指没有子节点的节点。原创 2023-02-03 23:02:26 · 248 阅读 · 0 评论 -
LeetCode 刷题系列 -- 1110. 删点成林
中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合)。to_delete 包含一些从 1 到 1000、各不相同的值。每个节点都有一个介于 1 到 1000 之间的值,且各不相同。返回森林中的每棵树。你可以按任意顺序组织答案。,树上每个节点都有一个不同的值。树中的节点数最大为 1000。原创 2023-02-03 17:09:42 · 661 阅读 · 0 评论 -
LeetCode 刷题系列 -- 110. 平衡二叉树
定义函数 height 用于获取以当前节点为根的二叉树的高度 ,若是左子树不为平衡二叉树或者右子树不为平衡二叉树或者左子树与右子树的差大于 1,则说明该二叉树不是平衡二叉树,返回 -1,否则正常返回二叉树的高度值 = 左子树与右子树最大高度 + 1。那么我们遍历一下二叉树的每个节点,只有当所有节点均满足左右两个子树的高度差的绝对值不超过 1 时,才能满足题目要求。回顾一下,什么是高度平衡二叉树?二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。的左右两个子树的高度差的绝对值不超过 1。原创 2023-02-03 16:03:30 · 488 阅读 · 0 评论 -
LeetCode刷题系列 -- 1080. 根到叶路径上的不足节点
从根到任何叶的路径。(所谓一个叶子节点,就是一个没有子节点的节点)的每种可能的 “根-叶” 路径上值的总和全都小于给定的。请你删除所有不足节点,并返回生成的二叉树的根。,则该节点被称之为「不足节点」,需要被删除。给定的树有 1 到 5000 个节点。原创 2023-02-01 19:13:29 · 415 阅读 · 0 评论 -
LeetCode 刷题系列 -- 108. 将有序数组转换为二叉搜索树
二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。排列,请你将其转换为一棵。原创 2023-02-01 16:09:18 · 356 阅读 · 1 评论 -
LeetCode 刷题系列 -- 1026. 节点与其祖先之间的最大差值
(如果 A 的任何子节点之一为 B,或者 A 的任何子节点是 B 的祖先,那么我们认为 A 是 B 的祖先)在所有可能的差值中,最大值 7 由 |8 - 1| = 7 得出。树中的节点数在 2 到 5000 之间。原创 2023-02-01 15:44:21 · 240 阅读 · 0 评论 -
LeetCode 刷题系列 -- 1022. 从根到叶的二进制数之和
例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13。对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。题目数据保证答案是一个。树中的节点数在 [1, 1000] 范围内。给出一棵二叉树,其上每个结点的值都是。Node.val 仅为 0 或 1。原创 2023-02-01 14:46:11 · 95 阅读 · 0 评论 -
LeetCode刷题系列 -- 101. 对称二叉树
给你一个二叉树的根节点。, 检查它是否轴对称。原创 2023-01-31 23:53:25 · 73 阅读 · 0 评论 -
LeetCode刷题系列 -- 1008. 前序遍历构造二叉搜索树
对于给定的测试用例,总是有可能找到具有给定需求的二叉搜索树。给定一个整数数组,它表示BST(即。是一棵二叉树,其中每个节点,首先显示节点的值,然后遍历。preorder 中的值。,构造树并返回其根。原创 2023-01-31 19:27:08 · 397 阅读 · 0 评论 -
LeetCode 刷题系列 -- 543. 二叉树的直径
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。两结点之间的路径长度是以它们之间边的数目表示。原创 2023-01-31 17:42:26 · 80 阅读 · 0 评论 -
235. 二叉搜索树的最近公共祖先
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8。输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4。例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]原创 2022-11-25 23:30:54 · 93 阅读 · 0 评论 -
LeetCode 刷题系列 -- 450. 删除二叉搜索树中的节点
3. 待删除节点既有左子节点又有右子节点,那么可以找到左子树中val最大的节点或者右子树中val最小的节点,并删除左子树中val最大的节点或者右子树中val最小的节点;一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示。输入: root = [5,3,6,2,4,null,7], key = 0。输入:root = [5,3,6,2,4,null,7], key = 3。输出:[5,4,6,2,null,null,7]输出: [5,3,6,2,4,null,7]如果找到了,删除它。原创 2022-11-13 23:33:28 · 105 阅读 · 0 评论 -
LeetCode刷题系列 -- 701. 二叉搜索树中的插入操作
给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。输入:root = [4,2,7,1,3,null,null,null,null,null,null], val = 5。输入:root = [40,20,60,10,30,50,70], val = 25。输出:[40,20,60,10,30,50,70,null,null,25]输入:root = [4,2,7,1,3], val = 5。输出:[4,2,7,1,3,5]输出:[4,2,7,1,3,5]原创 2022-11-13 21:25:43 · 160 阅读 · 0 评论 -
LeetCode 刷题系列 -- 98. 验证二叉搜索树
链接:https://leetcode.cn/problems/validate-binary-search-tree。1. 需要当前节点的值,要大于其左子树中任何一个节点的值,否则就不是 二叉搜索树;2. 需要当前节点的值,要小于其右子树中任何一个节点的值,否则就不是 二叉搜索树;给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。输入:root = [5,1,4,null,null,3,6]解释:根节点的值是 5 ,但是右子节点的值是 4。节点的右子树只包含 大于 当前节点的数。原创 2022-11-13 20:14:58 · 757 阅读 · 0 评论 -
LeetCode刷题系列 -- 1038. 从二叉搜索树到更大和树
输出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]给定一个二叉搜索树 root (BST),请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]简单,中序遍历是从小到大的遍历 二叉搜索树,反过来就是中序遍历师,先遍历右子树,再遍历左子树。若是将二叉搜索树中序遍历一遍,从最大值开始向前,依次求和,并更新对应节点的值。原创 2022-11-13 19:21:51 · 136 阅读 · 0 评论 -
LeetCode刷题系列 -- 230. 二叉搜索树中第K小的元素
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。链接:https://leetcode.cn/problems/kth-smallest-element-in-a-bst。输入:root = [5,3,6,2,4,null,null,1], k = 3。输入:root = [3,1,4,null,2], k = 1。中序遍历,查到 第 k 个元素,返回。来源:力扣(LeetCode)树中的节点数为 n。原创 2022-11-13 18:57:18 · 280 阅读 · 0 评论 -
LeetCode刷题系列 -- 652. 寻找重复的子树
定义 vector ,当发现 某个字符串出现的次数为 2 时,该字符串对应的节点即为题目所求的一个结果,并存到 vector 中。定义一个 map,其 key 为当前节点 root 前序遍历后的字符串,value 为 以该字符串为前序遍历的节点的个数;输入:root = [1,2,3,4,null,2,4,null,null,4]输入:root = [2,2,2,3,null,3,null]输入:root = [2,1,1]输出:[[2,4],[4]]输出:[[2,3],[3]]原创 2022-11-12 23:32:02 · 396 阅读 · 0 评论 -
LeetCode 刷题系列 -- 106. 从中序与后序遍历序列构造二叉树
链接:https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal。输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]输入:inorder = [-1], postorder = [-1]输出:[3,9,20,null,null,15,7]来源:力扣(LeetCode)原创 2022-11-12 18:46:24 · 484 阅读 · 0 评论 -
LeetCode刷题系列 -- 105. 从前序与中序遍历序列构造二叉树
链接:https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal。输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]输入: preorder = [-1], inorder = [-1]输出: [3,9,20,null,null,15,7]preorder 保证 为二叉树的前序遍历序列。inorder 保证 为二叉树的中序遍历序列。原创 2022-11-12 17:11:32 · 89 阅读 · 0 评论 -
LeetCode刷题系列 -- 654. 最大二叉树
[3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5]。- [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1]。- [2,1] 中的最大值是 2 ,左边部分是 [] ,右边部分是 [1]。- [0,5] 中的最大值是 5 ,左边部分是 [0] ,右边部分是 []。输出:[6,3,5,null,2,0,null,null,1]输入:nums = [3,2,1,6,0,5]输出:[3,null,2,null,1]原创 2022-11-12 17:07:02 · 103 阅读 · 0 评论 -
LeetCode 刷题系列 -- 剑指 Offer 26. 树的子结构
1. 定义 recur(TreeNode* A, TreeNode* B), 用来判断当前 B 是否为 以 A 开始的子结构。链接:https://leetcode.cn/problems/shu-de-zi-jie-gou-lcof。输入两棵二叉树A和B,判断B是不是A的子结构。输入:A = [3,4,5,1,2], B = [4,1]B是A的子结构, 即 A中有出现和B相同的结构和节点值。输入:A = [1,2,3], B = [3,1]2. 递归调用 isSubStructure。原创 2022-11-09 00:43:17 · 79 阅读 · 0 评论 -
LeetCode 刷题系列 -- 114. 二叉树展开为链表
链接:https://leetcode.cn/problems/flatten-binary-tree-to-linked-list。展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null。输出:[1,null,2,null,3,null,4,null,5,null,6]输入:root = [1,2,5,3,4,null,6]展开后的单链表应该与二叉树 先序遍历 顺序相同。输入:root = [0]输入:root = []原创 2022-11-06 22:24:15 · 196 阅读 · 0 评论 -
LeetCode刷题系列 -- 863. 二叉树中所有距离为 K 的结点
1. 目标结点 target 的父节点也有可能有距离为 k 的节点,所以我们需要记录一下每个节点的父节点,以便于能追溯父节点处的距离为 k 的节点。输入:root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, k = 2。4. 为了防止走回头路重复计算节点,需要判断当前节点下一个遍历的节点是否是不是遍历当前节点的上一个节点。解释:所求结点为与目标结点(值为 5)距离为 2 的结点,值分别为 7,4,以及 1。来源:力扣(LeetCode)输出:[7,4,1]原创 2022-10-06 18:37:40 · 547 阅读 · 0 评论 -
LeetCode刷题系列 -- 117. 填充每个节点的下一个右侧节点指针 II
解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。链接:https://leetcode.cn/problems/populating-next-right-pointers-in-each-node-ii。填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。输入:root = [1,2,3,4,5,null,7]输出:[1,#,2,3,#,4,5,7,#]原创 2022-09-19 23:44:04 · 148 阅读 · 0 评论 -
LeetCode刷题系列 -- 1020. 飞地的数量
1. 遍历矩阵四个边界的元素,若是遇到 1 的格子,则以该格子做深度遍历。给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格、1 表示一个陆地单元格。一次 移动 是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过 grid 的边界。输入:grid = [[0,0,0,0],[1,0,1,0],[0,1,1,0],[0,0,0,0]]输入:grid = [[0,1,1,0],[0,0,1,0],[0,0,1,0],[0,0,0,0]]原创 2022-09-04 20:18:55 · 1060 阅读 · 0 评论 -
LeetCode 刷题系列-- 二叉树遍历
1. 二叉树前序遍历LeetCode题目链接:力扣前序遍历的顺序为:根左右1.1 递归:import java.util.ArrayList;import java.util.List;class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<>(); .原创 2022-03-20 21:02:49 · 474 阅读 · 0 评论