给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少。
这个路径的开始节点和结束节点可以是二叉树中的任意节点
思路:递归处理每个节点作为开始的最大路径和,如果>0,则下面保留,如果<0,则最大就是这个节点自己。
package main
/*
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
/**
*
* @param root TreeNode类
* @return int整型
*/
var max = 0
func maxPathSum(root *TreeNode) int {
// write code here
if root == nil {
return 0
}
max = root.Val
maxPath(root)
return max
}
func maxPath(root *TreeNode) int {
if root == nil {
return 0
}
leftSum := maxPath(root.Left)
rightSum := maxPath(root.Right)
tmp := root.Val
if leftSum > 0 {
tmp += leftSum
}
if rightSum > 0 {
tmp += rightSum
}
if tmp > max {
max = tmp
}
maxChild := leftSum
if rightSum > leftSum {
maxChild = rightSum
}
if maxChild > 0 {
return root.Val + maxChild
}
return root.Val
}