题目描述:
实际上是二叉树的后序遍历。
代码如下:
/**
* 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 ans=Integer.MIN_VALUE;//记录最大的路径和
public int maxPathSum(TreeNode root) {
maxSide(root);
return ans;
}
public int maxSide(TreeNode root){
if(root==null){
return 0;
}
int left=Math.max(0,maxSide(root.left));//左子树的最大路径和
int right=Math.max(0,maxSide(root.right));//右子树的最大路径和
ans=Math.max(ans,left+right+root.val);//判断该结点包含其左右路径的和是否大于当前路径和
return Math.max(left,right)+root.val;//返回左右子树中最大的一支加上根节点的权值
}