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
}