124. Binary Tree Maximum Path Sum
Binary Tree Maximum Path Sum
题目描述:
A path in a binary tree is a sequence of nodes where each pair of adjacent nodes in the sequence has an edge connecting them. A node can only appear in the sequence at most once. Note that the path does not need to pass through the root.
The path sum of a path is the sum of the node’s values in the path.
Given the root of a binary tree, return the maximum path sum of any non-empty path.
Example 1:
Input: root = [1,2,3]
Output: 6
Explanation: The optimal path is 2 -> 1 -> 3 with a path sum of 2 + 1 + 3 = 6.
Example 2:
Input: root = [-10,9,20,null,null,15,7]
Output: 42
Explanation: The optimal path is 15 -> 20 -> 7 with a path sum of 15 + 20 + 7 = 42.
Constraints:
The number of nodes in the tree is in the range [1, 3 * 104].
-1000 <= Node.val <= 1000
思路:
使用dfs遍历,返回左或者右子树加上自身值的最大值,算最大值的时候需要特殊处理,需要计算左+右子树+自身值是否是最大值,是就更换最大值。
代码:
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func maxPathSum(root *TreeNode) int {
if root == nil{
return 0
}
maxNum := -99999
var dfs func(root *TreeNode)int
dfs = func(root *TreeNode)int{
if root == nil{
return 0
}
l := dfs(root.Left)
r := dfs(root.Right)
maxNum = max(maxNum, max(root.Val, max(root.Val+l,max(root.Val+r, root.Val+r+l))))
root.Val = max(root.Val, max(root.Val+l,root.Val+r))
return root.Val
}
dfs(root)
return maxNum
}
func max(i, j int)int{
if i >j{
return i
}else{
return j
}
}
代码效率:
执行用时:16 ms, 在所有 Go 提交中击败了80.91%的用户
内存消耗:7.4 MB, 在所有 Go 提交中击败了89.68%的用户
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!