
递归code

class Solution {  int max_sum = Integer.MIN_VALUE;  //返回node为根节点对应的单边最大路径值  public int max_gain(TreeNode node) {    if (node == null) return 0;  //递归终止条件    // 递归计算左右子树从根节点出发的单边最大路径 如果小于0置为0    int left_gain = Math.max(max_gain(node.left), 0);    int right_gain = Math.max(max_gain(node.right), 0);    // 计算包括根节点的双边路径值    int price_newpath = node.val + left_gain + right_gain;    // 如果超过最大路径则更新    max_sum = Math.max(max_sum, price_newpath);    //返回该树从该节点出发的最大路径    return node.val + Math.max(left_gain, right_gain);  }  public int maxPathSum(TreeNode root) {    //调用跟节点    max_gain(root);    //返回最后的最大路径和    return max_sum;  }}