给定一个二叉树的头节点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);}
