[Day32]-[二叉树] 二叉树中的最大路径和
124. 二叉树中的最大路径和
路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。
路径和 是路径中各节点值的总和。
给你一个二叉树的根节点 root ,返回其 最大路径和 。
示例 1:
复制代码
示例 2:
复制代码
题解:
复制代码
本文字数:638 字
阅读完需:约 2 分钟
路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。
路径和 是路径中各节点值的总和。
给你一个二叉树的根节点 root ,返回其 最大路径和 。
示例 1:
输入:root = [1,2,3]输出:6解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6示例 2:
输入:root = [-10,9,20,null,null,15,7]输出:42解释:最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42
题解:
func TestMaxPathSum(t *testing.T) { var root = &TreeNode{ Val: -10, Left: &TreeNode{ Val: 9, }, Right: &TreeNode{ Val: 20, Left: &TreeNode{ Val: 15, }, Right: &TreeNode{ Val: 7, }, }, } var ans = math.MinInt // 初始最小值 var dfs func(root *TreeNode) int // 采用LRD递归 var max func(x, y int) int // 取最大值 max = func(x, y int) int { if x > y { return x } return y } dfs = func(root *TreeNode) int { if root == nil { // 递归终止条件 return 0 } l := max(0, dfs(root.Left)) // 左节点最大和 r := max(0, dfs(root.Right)) // 右节点最大和 ans = max(ans, l+r+root.Val) // 如果加上根的值小于上一次的ans,则保持不变 return max(l, r) + root.Val // 左节点 或则 右节点 最大和 } dfs(root) t.Log(ans)}Dead or Alive. 生存战斗是知识的源泉! 2018.11.08 加入
我是一名SRE哨兵,目前是好大夫基础架构部高级工程师。专注于 SRE,微服务、中间件的稳定性和可用性建设,整体负责好大夫服务治理云平台的设计和搭建!

促进软件开发及相关领域知识与创新的传播
京公网安备 11010502039052号

评论