package
0.0.0-20240920062246-d0657495930a
Repository: https://github.com/yigmmk/leetcode.git
Documentation: pkg.go.dev
# Packages
* @lc app=leetcode.cn id=100 lang=golang
*
* [100] 相同的树
*
* https://leetcode.cn/problems/same-tree/description/
*
* algorithms
* Easy (59.89%)
* Likes: 1009
* Dislikes: 0
* Total Accepted: 449K
* Total Submissions: 749.6K
* Testcase Example: '[1,2,3]\n[1,2,3]'
*
* 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
*
* 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
*
*
*
* 示例 1:
*
*
* 输入:p = [1,2,3], q = [1,2,3]
* 输出:true
*
*
* 示例 2:
*
*
* 输入:p = [1,2], q = [1,null,2]
* 输出:false
*
*
* 示例 3:
*
*
* 输入:p = [1,2,1], q = [1,1,2]
* 输出:false
*
*
*
*
* 提示:
*
*
* 两棵树上的节点数目都在范围 [0, 100] 内
* -10^4
*
*
*/.
* @lc app=leetcode.cn id=104 lang=golang
*
* [104] 二叉树的最大深度
*
* https://leetcode.cn/problems/maximum-depth-of-binary-tree/description/
*
* algorithms
* Easy (77.19%)
* Likes: 1735
* Dislikes: 0
* Total Accepted: 1.1M
* Total Submissions: 1.5M
* Testcase Example: '[3,9,20,null,null,15,7]'
*
* 给定一个二叉树 root ,返回其最大深度。
*
* 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
*
*
*
* 示例 1:
*
*
*
*
*
*
* 输入:root = [3,9,20,null,null,15,7]
* 输出:3
*
*
* 示例 2:
*
*
* 输入:root = [1,null,2]
* 输出:2
*
*
*
*
* 提示:
*
*
* 树中节点的数量在 [0, 10^4] 区间内。
* -100 <= Node.val <= 100
*
*
*/.
* @lc app=leetcode.cn id=112 lang=golang
*
* [112] 路径总和
*
* https://leetcode.cn/problems/path-sum/description/
*
* algorithms
* Easy (53.71%)
* Likes: 1276
* Dislikes: 0
* Total Accepted: 602.6K
* Total Submissions: 1.1M
* Testcase Example: '[5,4,8,11,null,13,4,7,2,null,null,null,1]\n22'
*
* 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点
* 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。
*
* 叶子节点 是指没有子节点的节点。
*
*
*
* 示例 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
* 解释:树中存在两条根节点到叶子节点的路径:
* (1 --> 2): 和为 3
* (1 --> 3): 和为 4
* 不存在 sum = 5 的根节点到叶子节点的路径。
*
* 示例 3:
*
*
* 输入:root = [], targetSum = 0
* 输出:false
* 解释:由于树是空的,所以不存在根节点到叶子节点的路径。
*
*
*
*
* 提示:
*
*
* 树中节点的数目在范围 [0, 5000] 内
* -1000 <= Node.val <= 1000
* -1000 <= targetSum <= 1000
*
*
*/.
* @lc app=leetcode.cn id=113 lang=golang
*
* [113] 路径总和 II
*
* https://leetcode.cn/problems/path-sum-ii/description/
*
* algorithms
* Medium (63.21%)
* Likes: 1055
* Dislikes: 0
* Total Accepted: 374.7K
* Total Submissions: 592.9K
* Testcase Example: '[5,4,8,11,null,13,4,7,2,null,null,5,1]\n22'
*
* 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
*
* 叶子节点 是指没有子节点的节点。
*
*
*
*
*
* 示例 1:
*
*
* 输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
* 输出:[[5,4,11,2],[5,8,4,5]]
*
*
* 示例 2:
*
*
* 输入:root = [1,2,3], targetSum = 5
* 输出:[]
*
*
* 示例 3:
*
*
* 输入:root = [1,2], targetSum = 0
* 输出:[]
*
*
*
*
* 提示:
*
*
* 树中节点总数在范围 [0, 5000] 内
* -1000
* -1000
*
*
*
*
*/.
* @lc app=leetcode.cn id=1145 lang=golang
*
* [1145] 二叉树着色游戏
*
* https://leetcode.cn/problems/binary-tree-coloring-game/description/
*
* algorithms
* Medium (47.88%)
* Likes: 172
* Dislikes: 0
* Total Accepted: 19.3K
* Total Submissions: 36.1K
* Testcase Example: '[1,2,3,4,5,6,7,8,9,10,11]\n11\n3'
*
* 有两位极客玩家参与了一场「二叉树着色」的游戏。游戏中,给出二叉树的根节点 root,树上总共有 n 个节点,且 n 为奇数,其中每个节点上的值从 1 到
* n 各不相同。
*
* 最开始时:
*
*
* 「一号」玩家从 [1, n] 中取一个值 x(1 <= x <= n);
* 「二号」玩家也从 [1, n] 中取一个值 y(1 <= y <= n)且 y != x。
*
*
* 「一号」玩家给值为 x 的节点染上红色,而「二号」玩家给值为 y 的节点染上蓝色。
*
* 之后两位玩家轮流进行操作,「一号」玩家先手。每一回合,玩家选择一个被他染过色的节点,将所选节点一个 未着色
* 的邻节点(即左右子节点、或父节点)进行染色(「一号」玩家染红色,「二号」玩家染蓝色)。
*
* 如果(且仅在此种情况下)当前玩家无法找到这样的节点来染色时,其回合就会被跳过。
*
* 若两个玩家都没有可以染色的节点时,游戏结束。着色节点最多的那位玩家获得胜利 ✌️。
*
* 现在,假设你是「二号」玩家,根据所给出的输入,假如存在一个 y 值可以确保你赢得这场游戏,则返回 true ;若无法获胜,就请返回 false 。
*
*
* 示例 1 :
*
*
* 输入:root = [1,2,3,4,5,6,7,8,9,10,11], n = 11, x = 3
* 输出:true
* 解释:第二个玩家可以选择值为 2 的节点。
*
* 示例 2 :
*
*
* 输入:root = [1,2,3], n = 3, x = 1
* 输出:false
*
*
*
*
* 提示:
*
*
* 树中节点数目为 n
* 1 <= x <= n <= 100
* n 是奇数
* 1 <= Node.val <= n
* 树中所有值 互不相同
*
*
*/.
* @lc app=leetcode.cn id=1161 lang=golang
*
* [1161] 最大层内元素和
*
* https://leetcode.cn/problems/maximum-level-sum-of-a-binary-tree/description/
*
* algorithms
* Medium (65.62%)
* Likes: 125
* Dislikes: 0
* Total Accepted: 42.9K
* Total Submissions: 65.3K
* Testcase Example: '[1,7,0,7,-8,null,null]'
*
* 给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。
*
* 请返回层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个。
*
*
*
* 示例 1:
*
*
*
*
* 输入:root = [1,7,0,7,-8,null,null]
* 输出:2
* 解释:
* 第 1 层各元素之和为 1,
* 第 2 层各元素之和为 7 + 0 = 7,
* 第 3 层各元素之和为 7 + -8 = -1,
* 所以我们返回第 2 层的层号,它的层内元素之和最大。
*
*
* 示例 2:
*
*
* 输入:root = [989,null,10250,98693,-89388,null,null,null,-32127]
* 输出:2
*
*
*
*
* 提示:
*
*
* 树中的节点数在 [1, 10^4]范围内
* -10^5 <= Node.val <= 10^5
*
*
*/.
* @lc app=leetcode.cn id=1372 lang=golang
*
* [1372] 二叉树中的最长交错路径
*
* https://leetcode.cn/problems/longest-zigzag-path-in-a-binary-tree/description/
*
* algorithms
* Medium (55.45%)
* Likes: 153
* Dislikes: 0
* Total Accepted: 22K
* Total Submissions: 39.6K
* Testcase Example: '[1,null,1,1,1,null,null,1,1,null,1,null,null,null,1]'
*
* 给你一棵以 root 为根的二叉树,二叉树中的交错路径定义如下:
*
*
* 选择二叉树中 任意 节点和一个方向(左或者右)。
* 如果前进方向为右,那么移动到当前节点的的右子节点,否则移动到它的左子节点。
* 改变前进方向:左变右或者右变左。
* 重复第二步和第三步,直到你在树中无法继续移动。
*
*
* 交错路径的长度定义为:访问过的节点数目 - 1(单个节点的路径长度为 0 )。
*
* 请你返回给定树中最长 交错路径 的长度。
*
*
*
* 示例 1:
*
*
*
* 输入:root = [1,null,1,1,1,null,null,1,1,null,1,null,null,null,1,null,1]
* 输出:3
* 解释:蓝色节点为树中最长交错路径(右 -> 左 -> 右)。
*
*
* 示例 2:
*
*
*
* 输入:root = [1,1,1,null,1,null,null,1,1,null,1]
* 输出:4
* 解释:蓝色节点为树中最长交错路径(左 -> 右 -> 左 -> 右)。
*
*
* 示例 3:
*
* 输入:root = [1]
* 输出:0
*
*
*
*
* 提示:
*
*
* 每棵树最多有 50000 个节点。
* 每个节点的值在 [1, 100] 之间。
*
*
*/.
* @lc app=leetcode.cn id=199 lang=golang
*
* [199] 二叉树的右视图
*
* https://leetcode.cn/problems/binary-tree-right-side-view/description/
*
* algorithms
* Medium (66.21%)
* Likes: 987
* Dislikes: 0
* Total Accepted: 336.7K
* Total Submissions: 508.1K
* Testcase Example: '[1,2,3,null,5,null,4]'
*
* 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
*
*
*
* 示例 1:
*
*
*
*
* 输入: [1,2,3,null,5,null,4]
* 输出: [1,3,4]
*
*
* 示例 2:
*
*
* 输入: [1,null,3]
* 输出: [1,3]
*
*
* 示例 3:
*
*
* 输入: []
* 输出: []
*
*
*
*
* 提示:
*
*
* 二叉树的节点个数的范围是 [0,100]
* -100
*
*
*/.
* @lc app=leetcode.cn id=2331 lang=golang
*
* [2331] 计算布尔二叉树的值
*
* https://leetcode.cn/problems/evaluate-boolean-binary-tree/description/
*
* algorithms
* Easy (82.21%)
* Likes: 56
* Dislikes: 0
* Total Accepted: 22.9K
* Total Submissions: 27.1K
* Testcase Example: '[2,1,3,null,null,0,1]'
*
* 给你一棵 完整二叉树 的根,这棵树有以下特征:
*
*
* 叶子节点 要么值为 0 要么值为 1 ,其中 0 表示 False ,1 表示 True 。
* 非叶子节点 要么值为 2 要么值为 3 ,其中 2 表示逻辑或 OR ,3 表示逻辑与 AND 。
*
*
* 计算 一个节点的值方式如下:
*
*
* 如果节点是个叶子节点,那么节点的 值 为它本身,即 True 或者 False 。
* 否则,计算 两个孩子的节点值,然后将该节点的运算符对两个孩子值进行 运算 。
*
*
* 返回根节点 root 的布尔运算值。
*
* 完整二叉树 是每个节点有 0 个或者 2 个孩子的二叉树。
*
* 叶子节点 是没有孩子的节点。
*
*
*
* 示例 1:
*
*
*
* 输入:root = [2,1,3,null,null,0,1]
* 输出:true
* 解释:上图展示了计算过程。
* AND 与运算节点的值为 False AND True = False 。
* OR 运算节点的值为 True OR False = True 。
* 根节点的值为 True ,所以我们返回 true 。
*
* 示例 2:
*
* 输入:root = [0]
* 输出:false
* 解释:根节点是叶子节点,且值为 false,所以我们返回 false 。
*
*
*
*
* 提示:
*
*
* 树中节点数目在 [1, 1000] 之间。
* 0 <= Node.val <= 3
* 每个节点的孩子数为 0 或 2 。
* 叶子节点的值为 0 或 1 。
* 非叶子节点的值为 2 或 3 。
*
*
*/.
* @lc app=leetcode.cn id=236 lang=golang
*
* [236] 二叉树的最近公共祖先
*
* https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/description/
*
* algorithms
* Medium (70.14%)
* Likes: 2508
* Dislikes: 0
* Total Accepted: 609.5K
* Total Submissions: 868K
* Testcase Example: '[3,5,1,6,2,0,8,null,null,7,4]\n5\n1'
*
* 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
*
* 百度百科中最近公共祖先的定义为:“对于有根树 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 = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
* 输出:5
* 解释:节点 5 和节点 4 的最近公共祖先是节点 5 。因为根据定义最近公共祖先节点可以为节点本身。
*
*
* 示例 3:
*
*
* 输入:root = [1,2], p = 1, q = 2
* 输出:1
*
*
*
*
* 提示:
*
*
* 树中节点数目在范围 [2, 10^5] 内。
* -10^9
* 所有 Node.val 互不相同 。
* p != q
* p 和 q 均存在于给定的二叉树中。
*
*
*/.
* @lc app=leetcode.cn id=437 lang=golang
*
* [437] 路径总和 III
*
* https://leetcode.cn/problems/path-sum-iii/description/
*
* algorithms
* Medium (49.24%)
* Likes: 1747
* Dislikes: 0
* Total Accepted: 255.9K
* Total Submissions: 521.2K
* Testcase Example: '[10,5,-3,3,2,null,11,3,-2,null,1]\n8'
*
* 给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。
*
* 路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
*
*
*
* 示例 1:
*
*
*
*
* 输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8
* 输出:3
* 解释:和等于 8 的路径有 3 条,如图所示。
*
*
* 示例 2:
*
*
* 输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
* 输出:3
*
*
*
*
* 提示:
*
*
* 二叉树的节点个数的范围是 [0,1000]
* -10^9
* -1000
*
*
*/.
* @lc app=leetcode.cn id=450 lang=golang
*
* [450] 删除二叉搜索树中的节点
*
* https://leetcode.cn/problems/delete-node-in-a-bst/description/
*
* algorithms
* Medium (52.33%)
* Likes: 1265
* Dislikes: 0
* Total Accepted: 233.4K
* Total Submissions: 446K
* Testcase Example: '[5,3,6,2,4,null,7]\n3'
*
* 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key
* 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。
*
* 一般来说,删除节点可分为两个步骤:
*
*
* 首先找到需要删除的节点;
* 如果找到了,删除它。
*
*
*
*
* 示例 1:
*
*
*
*
* 输入:root = [5,3,6,2,4,null,7], key = 3
* 输出:[5,4,6,2,null,null,7]
* 解释:给定需要删除的节点值是 3,所以我们首先找到 3 这个节点,然后删除它。
* 一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示。
* 另一个正确答案是 [5,2,6,null,4,null,7]。
*
*
*
*
* 示例 2:
*
*
* 输入: root = [5,3,6,2,4,null,7], key = 0
* 输出: [5,3,6,2,4,null,7]
* 解释: 二叉树不包含值为 0 的节点
*
*
* 示例 3:
*
*
* 输入: root = [], key = 0
* 输出: []
*
*
*
* 提示:
*
*
* 节点数的范围 [0, 10^4].
* @lc app=leetcode.cn id=687 lang=golang
*
* [687] 最长同值路径
*
* https://leetcode.cn/problems/longest-univalue-path/description/
*
* algorithms
* Medium (47.77%)
* Likes: 782
* Dislikes: 0
* Total Accepted: 84.8K
* Total Submissions: 177.3K
* Testcase Example: '[5,4,5,1,1,null,5]'
*
* 给定一个二叉树的 root ,返回 最长的路径的长度 ,这个路径中的 每个节点具有相同值 。 这条路径可以经过也可以不经过根节点。
*
* 两个节点之间的路径长度 由它们之间的边数表示。
*
*
*
* 示例 1:
*
*
*
*
* 输入:root = [5,4,5,1,1,5]
* 输出:2
*
*
* 示例 2:
*
*
*
*
* 输入:root = [1,4,5,4,4,5]
* 输出:2
*
*
*
*
* 提示:
*
*
* 树的节点数的范围是 [0, 10^4]
* -1000 <= Node.val <= 1000
* 树的深度将不超过 1000
*
*
*/.
* @lc app=leetcode.cn id=700 lang=golang
*
* [700] 二叉搜索树中的搜索
*
* https://leetcode.cn/problems/search-in-a-binary-search-tree/description/
*
* algorithms
* Easy (77.74%)
* Likes: 448
* Dislikes: 0
* Total Accepted: 288.6K
* Total Submissions: 371K
* Testcase Example: '[4,2,7,1,3]\n2'
*
* 给定二叉搜索树(BST)的根节点 root 和一个整数值 val。
*
* 你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。
*
*
*
* 示例 1:
*
*
*
*
* 输入:root = [4,2,7,1,3], val = 2
* 输出:[2,1,3]
*
*
* 示例 2:
*
*
* 输入:root = [4,2,7,1,3], val = 5
* 输出:[]
*
*
*
*
* 提示:
*
*
* 数中节点数在 [1, 5000] 范围内
* 1 <= Node.val <= 10^7
* root 是二叉搜索树
* 1 <= val <= 10^7
*
*
*/.
* @lc app=leetcode.cn id=95 lang=golang
*
* [95] 不同的二叉搜索树 II
*
* https://leetcode.cn/problems/unique-binary-search-trees-ii/description/
*
* algorithms
* Medium (73.23%)
* Likes: 1416
* Dislikes: 0
* Total Accepted: 165.1K
* Total Submissions: 225.4K
* Testcase Example: '3'
*
* 给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。
*
*
*
*
*
* 示例 1:
*
*
* 输入:n = 3
* 输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]
*
*
* 示例 2:
*
*
* 输入:n = 1
* 输出:[[1]]
*
*
*
*
* 提示:
*
*
* 1
*
*
*
*
*/.
No description provided by the author
* @lc app=leetcode.cn id=99 lang=golang
*
* [99] 恢复二叉搜索树
*
* https://leetcode.cn/problems/recover-binary-search-tree/description/
*
* algorithms
* Medium (60.27%)
* Likes: 855
* Dislikes: 0
* Total Accepted: 133.1K
* Total Submissions: 220.8K
* Testcase Example: '[1,3,null,null,2]'
*
* 给你二叉搜索树的根节点 root ,该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下,恢复这棵树 。
*
*
*
* 示例 1:
*
*
* 输入:root = [1,3,null,null,2]
* 输出:[3,1,null,null,2]
* 解释:3 不能是 1 的左孩子,因为 3 > 1 。交换 1 和 3 使二叉搜索树有效。
*
*
* 示例 2:
*
*
* 输入:root = [3,1,4,null,null,2]
* 输出:[2,1,4,null,null,3]
* 解释:2 不能在 3 的右子树中,因为 2 < 3 。交换 2 和 3 使二叉搜索树有效。
*
*
*
* 提示:
*
*
* 树上节点的数目在范围 [2, 1000] 内
* -2^31 <= Node.val <= 2^31 - 1
*
*
*
*
* 进阶:使用 O(n) 空间复杂度的解法很容易实现。你能想出一个只使用 O(1) 空间的解决方案吗?
*
*/.