437. 路径总和 III
双重递归

count(TreeNode node,int targetSum) 计算以node为起点,目标和为targetSum的路径。
/*** 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 sum;public int pathSum(TreeNode root, int targetSum) {if(root==null) return 0;count(root,targetSum);pathSum(root.left, targetSum);pathSum(root.right, targetSum);return sum;}private void count(TreeNode node,int targetSum){if(node==null) return;if(node.val==targetSum) sum++;count(node.left, targetSum-node.val);count(node.right,targetSum-node.val);}}
124. 二叉树中的最大路径和
class Solution {int ans=Integer.MIN_VALUE;public int maxPathSum(TreeNode root) {if(root==null) return 0;getMax(root);return ans;}public int getMax(TreeNode root){if(root==null) return 0;int left=Math.max(0,getMax(root.left));int right=Math.max(0,getMax(root.right));ans=Math.max(ans,left+right+root.val);return Math.max(left,right)+root.val;}}
