版权声明:原创勿转 https://cloud.tencent.com/developer/article/1412845
涉及到二叉树的,绝大部分都是采用递归的思路处理,这个也不例外,递归获得左右子树的最大sum,全局最大sum就是最大值加上root的值
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
var ans int
func maxPathSum(root *TreeNode) int {
ans = math.MinInt32
if root == nil {
return 0
}
if root.Left == nil && root.Right == nil {
return root.Val
}
maxPath(root)
return ans
}
func mymax(x, y int) int {
if x > y {
return x
}
return y
}
func maxPath(root *TreeNode) int {
if root == nil {
return 0
}
l := mymax(0, maxPath(root.Left))
r := mymax(0, maxPath(root.Right))
sum := l + r + root.Val
ans = mymax(ans, sum)
return mymax(l, r) + root.Val
}