import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return int整型 */ private int res = 0; /** * 计算二叉树中路径和的最大值 * * @param root 根节点 * @return 最大路径和 */ public int maxMilkSum(TreeNode root) { if (root == null) return 0; dfs(root); return res; } /** * 返回以root为根节点的子树中的最大的到叶子节点路径和 * * @param root 当前节点 * @return 当前节点到叶子节点的最大路径和 */ private int dfs(TreeNode root) { if (root == null) return 0; int l = dfs(root.left); int r = dfs(root.right); // 更新最大路径和,可以选择从左子树、右子树或直接从当前节点到叶子节点 res = Math.max(res, l + r + root.val); // 返回从当前节点到叶子节点的最大路径和(可以选择从左子树或右子树) return Math.max(l, r) + root.val; } }
代码使用的编程语言是Java
该题考察的知识点是二叉树的遍历和递归算法。题目要求计算二叉树中路径和的最大值,需要使用递归来遍历二叉树的所有节点,并计算以每个节点为根的子树的最大路径和。通过在递归过程中动态更新最大路径和的值,最终得到整棵二叉树的最大路径和。
代码解释首先通过Java代码中看,意思解释大概就是通过深度优先搜索的方式遍历二叉树,同时使用递归来计算每个节点所对应的最大路径和。在遍历过程中,通过比较当前节点值加上左子树路径和加上右子树路径和的最大值,来更新最大路径和的值。最后返回最大路径和作为结果。