Leetcode Binary Tree Maximum Path Sum

来源:互联网 发布:微商和淘宝哪个挣钱 编辑:程序博客网 时间:2024/06/02 02:16

Given a binary tree, find the maximum path sum.

For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path does not need to go through the root.

For example:
Given the below binary tree,

       1      / \     2   3

Return 6.


Difficulty: Hard


Solution: DFS


/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    int ans = Integer.MIN_VALUE;    public int helper(TreeNode root){        ans = Math.max(ans, root.val);        if(root.left == null && root.right == null){            return root.val;        }        else if(root.left == null){            int right = helper(root.right);            ans = Math.max(ans, right);            if(right < 0) return root.val;            return right + root.val;        }        else if(root.right == null){            int left = helper(root.left);            ans = Math.max(ans, left);            if(left < 0) return root.val;            return left + root.val;        }        else{            int right = helper(root.right);            int left = helper(root.left);            ans = Math.max(ans, right);            ans = Math.max(ans, left);            if(right < 0 && left < 0){                return root.val;            }            else if(right < 0){                ans = Math.max(ans, left + root.val);                return left + root.val;            }            else if(left < 0){                ans = Math.max(ans, right + root.val);                return right + root.val;            }            else{                ans = Math.max(ans, right + root.val + left);                return Math.max(root.val + left, root.val + right);            }        }    }    public int maxPathSum(TreeNode root) {        if(root == null) return 0;        return Math.max(helper(root), ans);    }}


0 0