二叉树最大路径和

给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点

示例 1:

示例 2:

  • 一条从父节点延伸下来的路径,只能进入左子树或者右子树,不能同时进入左右子树
  • 只有在最大贡献值大于0的时候,才会选取对应的子节点
/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
let maxPathSum = function(root){
  let sum = Num.MIN_SAFE_INTEGER
  let dfs = (root) =>{
    if(!root){
       return 0
    }
    let left = dfs(root.left)
    let right = dfs(root.right)
    const maxSum = left + root.val + right // 计算总的最大路径和
    sum  = Math.max(sum, maxSum)  
    const max = root.val + Math.max(left, right)
    return max < 0 ? 0 : max
  }
   dfs(root)
   return sum
}
posted @ 2022-12-28 21:56  yiyunh  阅读(26)  评论(0)    收藏  举报