LeetCode 第124题
补个面试题
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
int maxNum = -50000;
int allValue = -50000;
public int maxPathSum(TreeNode root) {
if(null == root.left && null == root.right) {
return root.val;
}
dfs(root);
if(allValue > maxNum) {
return allValue;
}else {
return maxNum;
}
}
private int dfs(TreeNode root) {
if(null == root) {
return 0;
}
int value = root.val;
int partValue = 0;
int leftVlaue = 0;
int rightValue = 0;
int leftway = 0;
int rightway = 0;
if(null != root.left) {
leftVlaue = dfs(root.left);
}
if(null != root.right) {
rightValue = dfs(root.right);
}
partValue = value + leftVlaue + rightValue;
if(partValue > allValue) {
allValue = partValue;
}
leftway = leftVlaue + root.val;
rightway = rightValue + root.val;
if(value > leftway && value > rightway && value > maxNum) {
maxNum = value;
return value;
}
if(value < leftway || value < rightway) {
value = Math.max(leftway, rightway);
}
if(maxNum < value) {
maxNum = value;
}
return value;
}
}
结果