js(80)~[124] 二叉树中的最大路径和

73 阅读1分钟

力扣本题传送门

这个题标的是困难,但是思路理解以后,也没有那么难,不过第一次让我自己写,肯定是写不出来的.

这个看了助教的讲解,又看了题解,发现助教讲解的这个应该是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;
};