题目:Given a binary tree, find the maximum path sum.The path may start and end at any node in the tree.
Binary Tree Maximum Path Sum – LeetCode
解题思路:
1. 设一个max的全局变量记录遍历过程中的最大值
2. 对于任意node,计算出它两棵子树中的最长单边路径,然后三者相加与max比较
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int maxPathSum(TreeNode root) {
getMaxSingleBranch(root);
return max;
}
int max = Integer.MIN_VALUE;
// 根节点root 到叶子节点的最长路径
public int getMaxSingleBranch(TreeNode root) {
if(root == null) return 0;
// root左孩子最长单支路径
int left = getMaxSingleBranch(root.left);
//..
int right = getMaxSingleBranch(root.right);
//为负可直接忽略,加上他们只会更小
left = Math.max(left, 0);
right = Math.max(right , 0);
//确定是否更新max
max = Math.max(max,left + right + root.val );
//返回root单支最大路径
return root.val + Math.max(left , right);
}
}