🌕 124. 二叉树䞭的最倧路埄和

吞䜛童子2022幎10月10日
  • algorithm
  • tree
小于 1 分钟

🌕 124. 二叉树䞭的最倧路埄和

隟床: 🌕

问题描述

img_39.png


解法

/**
 * 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 min = Integer.MIN_VALUE;
    int res = min;
    public int maxPathSum(TreeNode root) {
        // 思路
        // res 记圕包含巊右子树 + 根节点的最倧倌
        // 每次返回的倌䞺单条路埄巊右子树䞭的最倧倌
        mySol(root);
        return res;
    }

    private int mySol(TreeNode root) {
        // 递園终止条件
        if(root == null) {
            return min;
        }
        // root != null
        int left = mySol(root.left);;
        int right = mySol(root.right);;
        int cur = root.val;
        if(root.val >= 0) {
            if(left > 0) {
                cur += left;
            }
            if(right > 0) {
                cur += right;
            }
        } else {
            // root.val < 0 䞀定保留根节点
            if(left > 0) {
                cur += left;
            } 
            if(right > 0) {
                cur += right;
            }
            cur = Math.max(cur, Math.max(left, right)); // 䞍保留根节点那么只有单独的巊子树 | 右子树
        }
        res = Math.max(cur, res);
        return Math.max(Math.max(left, 0), Math.max(right, 0)) + root.val; // 这诎明根节点䞀定保留因歀圚䞻凜数䞭需芁单独讚论
    }
}

蟓出

img_38.png

䞊次猖蟑于: 2022/10/10 䞋午8:43:48
莡献者: liuxianzhishou