这个题标的是困难,但是思路理解以后,也没有那么难,不过第一次让我自己写,肯定是写不出来的.
这个看了助教的讲解,又看了题解,发现助教讲解的这个应该是js最好的解法,也容易理解
var maxPathSum = function (root) {
// 初始化 最小数字 为最大路径和
let maxNum = Number.MIN_SAFE_INTEGER;
// 思路 最大路径和 为左子树最大路径和 + 右..和 + 跟节点的值
const dfs = (root) => {
if (!root) { return 0 };
const left = dfs(root.left);
const right = dfs(root.right);
// 当前子树 的最大路径和
const inMaxNum = left + right + root.val;
// 和之前的最大值最对比
maxNum = Math.max(inMaxNum, maxNum);
// 当前子树 对外提供的 最大路径和
const outMaxNum = root.val + Math.max(left, right);
// 返回 当..和 为其他循环做准备 考虑负数
return outMaxNum > 0 ? outMaxNum : 0;
}
dfs(root);
return maxNum;
};