给定一个二叉树的头节点head,路径的规定有以下三种不同的规定:
1)路径必须是头节点出发,到叶节点为止,返回最大路径和
2)路径可以从任何节点出发,但必须往下走到达任何节点,返回最大路径和
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
public int findmax(TreeNode root)
{
if (root==null)
{
return 0;
}
return f(root).allTreeMaxsum;
}
}
public class Info{
public int allTreeMaxsum;
public int fromHeadMaxsum;
public Info(int all,int from)
{
allTreeMaxsum= all;
fromHeadMaxsum = from;
}
}
public Info f(TreeNode x)
{
if (x==null)
{
return null;
}
Info leftInfo = f(x.left);
Info rightInfo =f(x.right);
int p1=Integer.MIN_VALUE;
if (leftInfo!=null)
{
p1= leftInfo.allTreeMaxsum;
}
int p2=Integer.MIN_VALUE;
if (rightInfo!=null)
{
p2 = rightInfo.allTreeMaxsum;
}
int p3 = x.val;
int p4 = Integer.MIN_VALUE;
if (leftInfo!=null)
{
p4 = x.val+leftInfo.fromHeadMaxsum;
}
int p5 = Integer.MIN_VALUE;
if (rightInfo!=null)
{
p5 = x.val+rightInfo.fromHeadMaxsum;
}
int allTreeMaxsum = Math.max(Math.max(Math.max(p1,p2),p3),Math.max(p4,p5));
int fromHeadMaxsum = Math.max(p3,Math.max(p4,p5));
return new Info(allTreeMaxsum,fromHeadMaxsum);
}