【LeetCode】Binary Tree Maximum Path Sum

来源:互联网 发布:高达哪部最好看 知乎 编辑:程序博客网 时间:2024/06/07 14:25
public class Solution {private static int ans = Integer.MIN_VALUE;/** * 以这棵树为例:                      2                   /     \                1(黄)      -1              /  \     /     \            1     -3  1       7 图中红色路径表示的一条最大路径:先看下递归过程:以左下角的1为root的树的最大路径肯定是1,而异-3为root的树的最大路径是-3,以他俩的父节点1为根节点的最大路径有这么几种情况:root.val,  root.val + left , root.val + right ,root.val + left + right取其中的最大值(图中的例子是root.val + left:2),更新max(上面取四个值得最大值,仅用于更新max) 但是这个递归函数的返回不应该包括root.val + left + right,因为黄底色的1作为2的左子树的返回值只能由其他节点经过黄底色的1,传到根节点2,单向,传到2,不能形成折路 * */public int getMax(TreeNode root) {// 获取每个节点左右单颗树的最大值,同时更新结果最大值if (root == null)return 0;else {int leftValue = getMax(root.left);int rightValue = getMax(root.right);ans = Math.max(ans,Math.max(Math.max(Math.max(leftValue + root.val, rightValue+ root.val), root.val), leftValue+ rightValue + root.val));return Math.max(Math.max(leftValue + root.val, rightValue + root.val),root.val);}}public  int maxPathSum(TreeNode root) {if (root == null)return 0;getMax(root);return ans;}}

0 0
原创粉丝点击