043_二叉树中的最大路径和

知识点:DFS

LeetCode第一百二十四题:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/submissions/

语言:GoLang

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
var maxSum int
func maxPathSum(root *TreeNode) int {
    maxSum = math.MinInt64

    dfs(root)

    return maxSum
}

// 深搜递归
func dfs(root *TreeNode) int {
    if root == nil {
        return 0
    }

    leftMax := max(0, dfs(root.Left))
    rightMax := max(0, dfs(root.Right))

    // 计算以该节点为根的子树,且经过该节点的路径最大和
    sum := root.Val + leftMax + rightMax
    if sum > maxSum {
        maxSum = sum
    }

    // 如果该节点为非根节点,返回以它为起点的路径段的最大值
    return root.Val + max(leftMax, rightMax)
}

func max(a int, b int) int {
    if a > b {
        return a
    }
    return b
}
posted @ 2020-04-02 21:08  Cenyol  阅读(106)  评论(0)    收藏  举报