
递归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; }}