image.png
image.png

递归code

image.png

  1. class Solution {
  2. int max_sum = Integer.MIN_VALUE;
  3. //返回node为根节点对应的单边最大路径值
  4. public int max_gain(TreeNode node) {
  5. if (node == null) return 0; //递归终止条件
  6. // 递归计算左右子树从根节点出发的单边最大路径 如果小于0置为0
  7. int left_gain = Math.max(max_gain(node.left), 0);
  8. int right_gain = Math.max(max_gain(node.right), 0);
  9. // 计算包括根节点的双边路径值
  10. int price_newpath = node.val + left_gain + right_gain;
  11. // 如果超过最大路径则更新
  12. max_sum = Math.max(max_sum, price_newpath);
  13. //返回该树从该节点出发的最大路径
  14. return node.val + Math.max(left_gain, right_gain);
  15. }
  16. public int maxPathSum(TreeNode root) {
  17. //调用跟节点
  18. max_gain(root);
  19. //返回最后的最大路径和
  20. return max_sum;
  21. }
  22. }