删除给定值的叶子节点-LeetCode
1325. 删除给定值的叶子节点 - Delete Leaves With a Given Value 🎯 问题描述(来源于LeetCode) 描述: 给你一棵以 root 为根的二叉树和一个整数 target,请你删除所有值为 target 的叶子节点。 注意,删除一个叶子节点后,其父节点可能变成新的叶子节点。如果新叶子节点的值也等于 target,则应继续删除。 重复此过程直到无法继续删除,返回删除后的根节点。 说明: 叶子节点指没有子节点的节点。 删除操作会持续进行,直到没有值为 target 的叶子节点。 示例: 示例 1: 123456输入: root = [1,2,3,2,null,2,4], target = 2输出: [1,null,3,null,4]解释: - 删除值为2的叶子节点(原树中的左叶子2和右子树的叶子2)- 父节点2变成叶子节点且值为2,继续删除- 最终只剩1,3,4 示例 2: 12输入: root = [1,3,3,3,2], target = 3输出: [1,3,null,null,2] 示例 3: 12输入: root ...
总价值可以被k整除的岛屿数目-LeetCode
3619. 总价值可以被k整除的岛屿数目 - Count Islands with Total Value Divisible by K 🎯 问题描述(来源于LeetCode) 描述: 给你一个 m x n 的矩阵 grid 和一个正整数 k。一个岛屿是一组四方向(上、下、左、右)相连的正整数格子。 岛屿的总价值是该岛屿上所有格子数值的和。 请返回总价值能被 k 整除的岛屿数量。 说明: 0(零)表示水域,不是岛屿的一部分。 数值为 0 的格子会将岛屿隔开。 只考虑四方向连通(不考虑对角线)。 所有正整数(大于 0)都代表陆地。 示例: 示例 1: 12输入: grid = [[0,2,1,0,0],[0,5,0,0,5],[0,0,1,0,0],[0,1,4,7,0],[0,2,0,0,8]], k = 5输出: 2 示例 2: 12输入: grid = [[3,0,3,0], [0,3,0,3], [3,0,3,0]], k = 3输出: 6 💻 解题思路 思路1:深度优先搜索 (DFS) 计算岛屿及总和 算法步骤 获取网格的大小 m(行数)和 n...
统计值等于子树平均值的节点数-LeetCode
2265. 统计值等于子树平均值的节点数 - Count Nodes Equal to Average of Subtree 🎯 问题描述(来源于LeetCode) 描述: 给定一棵二叉树的根节点 root,返回满足条件的节点数量:该节点的值等于其子树中所有节点值的平均值。 注意:空节点的平均值未定义,不考虑。 说明: n 个元素的平均值可以由 n 个元素 求和 然后再除以 n ,并 向下舍入 到最近的整数。 root 的 子树 由 root 和它的所有后代组成。 示例: 示例 1: 12345678910输入: root = [4,8,5,0,1,null,6]输出: 5解释: - 节点 4 的子树和=24,节点数=6,平均值=4,相等 ✅- 节点 8 的子树和=9,节点数=3,平均值=3,不相等 ❌- 节点 5 的子树和=5,节点数=1,平均值=5,相等 ✅- 节点 0 的子树和=0,节点数=1,平均值=0,相等 ✅- 节点 1 的子树和=1,节点数=1,平均值=1,相等 ✅- 节点 6 的子树和=6,节点数=1,平均值=6,相等 ✅总计 5 个节点。 示例 ...
网格中鱼的最大数量-LeetCode
2658. 网格中鱼的最大数量 - Number of Fish in a Grid 🎯 问题描述(来源于LeetCode) 描述: 给定一个 m x n 的整数矩阵 grid,其中: 0 表示陆地,不能行走。 正整数表示水域,且该格子中的鱼的数量。 你可以在任意水域格子开始,每次向上、下、左、右移动到相邻的水域格子,收集经过的所有格子中的鱼。 请你计算最多能收集到的鱼的总数。如果不存在水域,返回 0。 说明: 只能在水域格子之间移动(即值为正整数的格子)。 可以多次访问同一个格子吗?不行,题目隐含每个格子只能收集一次(实际上通过访问标记保证)。 水域是四连通的。 示例: 示例 1: 123输入: grid = [[0,2,1,0],[4,0,0,3],[1,0,0,4],[0,3,2,0]]输出: 7解释: 从左上角水域开始,可收集 2+1=3;从右下角水域开始,可收集 4+3=7;最大值为7。 示例 2: 12输入: grid = [[1,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,1]]输出: 1 💻 解题思路 思路1:D...
二叉树的坡度-LeetCode
563. 二叉树的坡度 - Binary Tree Tilt 🎯 问题描述(来源于LeetCode) 描述: 给定一个二叉树的根节点 root,计算并返回整个树的坡度。 一个节点的坡度定义为:该节点左子树所有节点之和与右子树所有节点之和的差的绝对值。 空节点的坡度为 0。 整棵树的坡度是所有节点坡度之和。 说明: 子树和包括该节点及其所有后代节点。 坡度不包含节点自身的值,只计算左右子树和的差。 示例: 示例 1: 123输入: root = [1,2,3]输出: 1解释: 节点2的坡度 = |0-0| = 0,节点3的坡度 = |0-0| = 0,节点1的坡度 = |2-3| = 1,总和 = 1。 示例 2: 123输入: root = [4,2,9,3,5,null,7]输出: 15解释: 节点3的坡度=0,节点5的坡度=0,节点7的坡度=0,节点2的坡度=|3-5|=2,节点9的坡度=|0-7|=7,节点4的坡度=|(2+3+5)-(9+7)|=|10-16|=6,总和=2+7+6=15。 💻 解题思路 思路1:后序遍历 + 重复计算子树和 算法...
出现次数最多的子树元素和-LeetCode
508. 出现次数最多的子树元素和 - Most Frequent Subtree Sum 🎯 问题描述(来源于LeetCode) 描述: 给你一个二叉树的根节点 root,找出出现次数最多的子树元素和。 子树元素和定义为:以该节点为根的子树中所有节点值之和(包括该节点本身)。 如果有多个和出现的次数相同,则按任意顺序返回这些和。 说明: 子树包括节点本身及其所有后代节点。 空树返回空列表。 示例: 示例 1: 123输入: root = [5,2,-3]输出: [2,-3,4]解释: 以5为根的子树和为 5+2-3=4,以2为根的子树和为2,以-3为根的子树和为-3,每个和只出现一次,所以返回所有和。 示例 2: 123输入: root = [5,2,-5]输出: [2]解释: 以5为根的子树和为 5+2-5=2,以2为根的子树和为2,以-5为根的子树和为-5,和2出现了两次,其他一次,所以返回[2]。 💻 解题思路 思路1:后序遍历 + 哈希表统计频率 算法步骤 初始化: 创建一个哈希表 freq,用于存储每个子树和出现的次数。 设置变量 ma...
合并二叉树-LeetCode
617. 合并二叉树 - Merge Two Binary Trees 🎯 问题描述(来源于LeetCode) 描述: 给定两棵二叉树 root1 和 root2,将它们合并成一棵新的二叉树。合并规则是: 如果两个节点重叠,则节点值相加作为合并后节点的新值。 如果其中一个节点为空,则直接使用非空节点作为合并后的节点。 说明: 合并后的树不需要是平衡二叉树,只需按照规则重建即可。 合并过程同步进行,不会修改原始树。 示例: 示例 1: 12输入: root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]输出: [3,4,5,5,4,null,7] 示例 2: 12输入: root1 = [1], root2 = [1,2]输出: [2,2] 💻 解题思路 思路1:递归前序遍历(同步合并) 算法步骤 递归终止条件: 如果 root1 为 None,则返回 root2。 如果 root2 为 None,则返回 root1。 这样可以处理其中一棵树节点为空的情况。 创建新节点: 新节点的值为两棵树当前节点...
对称二叉树-LeetCode
101. 对称二叉树 - Symmetric Tree 🎯 问题描述(来源于LeetCode) 描述: 给你一个二叉树的根节点 root,检查它是否轴对称(即镜像对称)。 说明: 轴对称意味着二叉树绕根节点中心对折后,左右两侧的节点值和结构完全一致。 空树被认为是轴对称的。 示例: 示例 1: 12输入: root = [1,2,2,3,4,4,3]输出: true 示例 2: 12输入: root = [1,2,2,null,3,null,3]输出: false 💻 解题思路 思路1:递归镜像比较 算法步骤 处理根节点: 如果根节点为空,直接返回 True(空树对称)。 否则,调用辅助函数比较根节点的左子树和右子树是否镜像对称。 定义辅助函数 输入两个节点 p 和 q,判断它们是否为镜像关系。 递归出口:如果 p 或 q 有一个为 None,则只有当两者同时为 None 时才返回 True,否则 False。 递归步骤: 当前节点值相等 (p.val == q.val) 并且 p 的左子树与 q 的右子树镜像对称 并且 p 的右子树与 q...
平衡二叉树-LeetCode
110. 平衡二叉树 - Balanced Binary Tree 🎯 问题描述(来源于LeetCode) 描述: 给定一个二叉树,判断它是否是高度平衡的。 一棵高度平衡二叉树定义为:每个节点的左右两个子树的高度差的绝对值不超过 1。 说明: 空树被认为是平衡二叉树。 树的高度是指从根节点到最远叶子节点的最长路径上的节点数(通常以边的数量计算,本题以节点数量计算)。 示例: 示例 1: 12输入: root = [3,9,20,null,null,15,7]输出: true 示例 2: 12输入: root = [1,2,2,3,3,null,null,4,4]输出: false 💻 解题思路 思路1:后序遍历 + 提前剪枝(自底向上) 算法步骤 定义递归函数 get_h(node): 返回以 node 为根的树的高度,如果该子树不平衡则返回 -1。 递归终止条件: 如果 node 为 None,返回高度 0。 递归计算左子树高度: 调用 get_h(node.left),如果返回 -1(左子树不平衡),则直接返回 -1,不再继续。...
找出克隆二叉树中的相同节点-LeetCode
1379. 找出克隆二叉树中的相同节点 - Find a Corresponding Node of a Binary Tree in a Clone of That Tree 🎯 问题描述(来源于LeetCode) 描述: 给定两棵二叉树 original 和 cloned,以及 original 中的一个目标节点 target。 已知 cloned 是 original 的一个深拷贝(即结构与节点值完全一致,但节点对象不同)。 请返回 cloned 中与 target 对应的节点。 说明: original 和 cloned 中的节点个数相同,且结构完全一致。 target 节点一定存在于 original 中。 不允许对二叉树进行修改。 示例: 示例 1: 12输入: original = [7,4,3,null,null,6,19], cloned = [7,4,3,null,null,6,19], target = 3输出: 值为 3 的节点(在 cloned 中对应的节点) 示例 2: 12输入: original = [7], cloned = [...













