[Leetcode 124]二叉树最大权重路径和 Binary Tree Maximum Path Sum
题目
,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; }