【路飞】二叉树中的最大路径和

107 阅读1分钟

题目:124. 二叉树中的最大路径和

image.png

分析

  1. 路径每到一个节点,有 3 种选择:1. 停在当前节点。2. 走到左子节点。3. 走到右子节点;
  2. 一个子树内部的最大路径和 = 左子树提供的最大路径和 + 根节点值 + 右子树提供的最大路径和;
  3. 如果某个子树 dfs 结果为负,走入它,收益不增反减,该子树就没用,需杜绝走入,返回 0;
  4. 一条从父节点延伸下来的路径,不能走入左子树又掉头走右子树,不能两头收益;
function maxPathSum(root) {
  let max = Number.MIN_SAFE_INTEGER;
  const dfs = (node) => {
    if (!node) return 0;
    const left = dfs(node.left);
    const right = dfs(node.right);
    // 第2点
    max = Math.max(max, node.val + left + right);
    // 第4点,只能选择left或者right的一个最大值;
    const outputMax = node.val + Math.max(0, left, right);
    return outputMax > 0 ? outputMax : 0;
  };
  dfs(root);
  return max;
}