题目

与543相似,543是求最长路径,这是最大权重求和(路径不一定最长)

A path in a binary tree is a sequence of nodes where each pair of adjacent nodes in the sequence has an edge connecting them. A node can only appear in the sequence at most once. Note that the path does not need to pass through the root.

The path sum of a path is the sum of the node's values in the path.

Given the root of a binary tree, return the maximum path sum of any non-empty path.

 

Example 1:

Input: root = [1,2,3]
Output: 6
Explanation: The optimal path is 2 -> 1 -> 3 with a path sum of 2 + 1 + 3 = 6.

Example 2:

Input: root = [-10,9,20,null,null,15,7]
Output: 42
Explanation: The optimal path is 15 -> 20 -> 7 with a path sum of 15 + 20 + 7 = 42.

 

 

分析

- 和543思路相同,+1改成加自身权重

- 注意负数情况!!,如果当前节点是正数,而子节点求和后是负数,则直接舍弃此负数权重,不用传回,即

Math.max(0,dfs(root.left));

 

代码

对比543,用int ans的写法

 

    int ans=Integer.MIN_VALUE;
    public int maxPathSum(TreeNode root) {
        dfs(root);
        return ans;
    }
    
    public int dfs(TreeNode root){
        if(root==null)
            return 0;
        int left=Math.max(0,dfs(root.left));
        int right=Math.max(0,dfs(root.right));
        ans=Math.max(ans,left+right+root.val);
        return Math.max(left,right)+root.val;
    }

 

 posted on 2021-11-23 04:45  alau  阅读(204)  评论(0编辑  收藏  举报