zoukankan      html  css  js  c++  java
  • [LeetCode] 124. 二叉树中的最大路径和

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

    给定一个非空二叉树,返回其最大路径和。

    本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。

    示例 1:

    输入: [1,2,3]
    
           1
          / 
         2   3
    
    输出: 6
    

    示例 2:

    输入: [-10,9,20,null,null,15,7]
    
       -10
       / 
      9  20
        /  
       15   7
    
    输出: 42
    
    package main
    
    import (
    	"fmt"
    	"math"
    )
    
    type TreeNode struct {
    	Val   int
    	Left  *TreeNode
    	Right *TreeNode
    }
    
    func maxPathSum(root *TreeNode) int {
    	maxSum := math.MinInt32
    	var maxGain func(*TreeNode) int
    	maxGain = func(node *TreeNode) int {
    		if node == nil {
    			return 0
    		}
    
    		// 递归计算左右子节点的最大贡献值
    		// 只有在最大贡献值大于 0 时,才会选取对应子节点
    		leftGain := max(maxGain(node.Left), 0)
    		rightGain := max(maxGain(node.Right), 0)
    
    		// 节点的最大路径和取决于该节点的值与该节点的左右子节点的最大贡献值
    		priceNewPath := node.Val + leftGain + rightGain
    
    		// 更新答案
    		maxSum = max(maxSum, priceNewPath)
    
    		// 返回节点的最大贡献值
    		return node.Val + max(leftGain, rightGain)
    	}
    	maxGain(root)
    	return maxSum
    }
    
    func max(x, y int) int {
    	if x > y {
    		return x
    	}
    	return y
    }
    
    func main() {
    	fmt.Println(maxPathSum(&TreeNode{1, &TreeNode{2, nil, nil}, &TreeNode{3, nil, nil}}))
    }
    
    

    来源:力扣(LeetCode)

    链接:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum

    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 相关阅读:
    keepalived高可用+nginx证书代理
    dfs缩略图
    FastDFS分布式图片服务器搭建
    red5视频播放服务器
    压力测试操作流程
    mysql主从库配置读写分离以及备份
    jdk环境
    mysql主从库配置读写分离以及备份
    mysql5.7.26安装
    数据库异地备份(脚本)
  • 原文地址:https://www.cnblogs.com/wangyiyang/p/13173896.html
Copyright © 2011-2022 走看看