求二叉树的最大路径和 发表于 2018-06-20 | 更新于 2019-05-09 | 分类于 算法 | 阅读次数: | 阅读次数: 本文字数: 1.3k | 阅读时长 ≈ 2 分钟 来源:https://blog.csdn.net/mine_song/article/details/69951308 代码:1234567891011121314151617181920212223242526272829303132333435363738394041424344/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { // 全局变量,记录最大路径和private int maxVal = Integer.MIN_VALUE; public int maxPathSum(TreeNode root) { if (root == null) return 0; maxCore(root); return maxVal; } // 该函数返回是左右的最大路径和,而非左+右+root的最大值 // 使用curValue,来标记左+右+root private int maxCore(TreeNode root) { if (root == null) return 0; // 求以root为根的当前子树的最大路径和 // 如果左右子树都是负数, // 那么就最大路径就是当前结点值(无论正负) int curValue = root.val; int lmax = maxCore(root.left); int rmax = maxCore(root.right); if (lmax > 0) curValue += lmax; if (rmax > 0) curValue += rmax; maxVal = Math.max(curValue, maxVal); // 返回以当前root为根的子树的最大路径和 // 左右有可能都为负数,所以需要参与比较大小 int thisMax = Math.max(root.val, Math.max(lmax + root.val, rmax + root.val)); return thisMax; }} ---------------- The End ---------------- 本文作者: easy_go 本文链接: https://mlone.top/2018/06/20/求二叉树的最大路径和/ 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!