总体思路:对于从任意节点开始的路径,在遍历的路上遇到某节点 node 时,我们有两个选择:第一,不选 node 节点,直接终止这条路的遍历。第二,选择 node 节点,这意味着结果等于 node 节点的值 加上 分别从 node 左、右子节点开始到某叶子节点为止的路径和的最大值
dfs 函数返回的是:从 root(输入的形参)节点开始往下遍历到某叶子节点为止,其左、右子树路径中节点值的和较大的那个与 0 相比的较大者。

function maxPathSum(root) {
    let res = -Number.MAX_VALUE;
    function dfs(root) {
        if (!root) return 0;
        let left = dfs(root.left), right = dfs(root.right);
        // 更新 res,当 res = res,即意味着不选当前节点; res = left + right + root.val 意味着选择当前节点
        res = Math.max(res, left + right + root.val);
        // 返回 0 意味着不选 root 节点,否则选择 root 节点,并返回 Math.max(left, right) + root.val。
        return Math.max(0, Math.max(left, right) + root.val);
    }
    dfs(root);
    return res;
}