标签:图片 def mat main 维护 pre efi ini 包含
给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int max = Integer.MIN_VALUE;// 维护当前最大路径和
public void main(String args[]) {
}
public int maxPathSum(TreeNode root) {
maxRootPathSum(root);
return max;
}
private int maxRootPathSum(TreeNode root) {// 作用1:返回路径一端为当前根节点的最大路径和(即最多只能包含一边子树的路径);//
// 作用2:更新当前最大路径和max
if (root == null) {
// 此时只返回值,不更新最大值,保证当树只有负数值节点时,最大值不会是0;
return 0;
}
int lMaxSum = maxRootPathSum(root.left);
int rMaxSum = maxRootPathSum(root.right);
int maxTmp = root.val + Math.max(lMaxSum, 0) + Math.max(rMaxSum, 0);
max = Math.max(maxTmp, max);// maxTmp为必须包含根结点的当前树的最大路径,与max比较,更新当前最大路径和max
int maxRootPathSum = Math.max(root.val + Math.max(lMaxSum, 0), // 计算路径一端为当前根节点的最大路径和,并作为返回值传递给父节点
root.val + Math.max(rMaxSum, 0));
return maxRootPathSum;
}
}
标签:图片 def mat main 维护 pre efi ini 包含
原文地址:https://www.cnblogs.com/coding-gaga/p/12181407.html