题目
给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
示例
输入: [1,2,3]
1
/ \
2 3
输出: 6
输入: [-10,9,20,null,null,15,7]
-10
/ \
9 20
/ \
15 7
输出: 42
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
private int index;
public int maxPathSum(TreeNode root) {
if(root==null){return 0;}
index=root.val;
JiSuan(root);
return index;
}
public int JiSuan(TreeNode root){
if(root==null){return 0;}
//先访问左节点,接着访问右节点
int left=JiSuan(root.left);
int right=JiSuan(root.right);
//此处要做一个判断,例如说,对于示例一,节点1就是最终的结果的根节点
//所以我们的路径可以包含节点1的左右节点
int num=Math.max(root.val,Math.max(root.val+left+right,
//但通常情况下,我们只能取当前节点左右节点中最大的,也就是当前节点不是
//最大路径的根节点;
Math.max(root.val+left,root.val+right)));
index=Math.max(index,num);
return Math.max(root.val,Math.max(root.val+left,root.val+right));
}
}