lc1026-节点与其祖先之间的最大差值

题目描述

  • 给定一棵二叉树,找到最大的“节点与其祖先节点的差值的绝对值”

示例

输入:root = [8,3,10,1,6,null,14,null,null,4,7,13]
输出:7
解释:
    8
   / \
  3   10
 / \    \
1   6    14
   / \   /
  4   7 13

|8 - 1| = 7
输入:root = [1,null,2,null,0,3]
输出:3
解释:
 1
  \
   2
    \
     0
    /
   3

|0 - 3| = 3

题解

  • 思路:dfs
    • 每层计算一下和当前节点的值与上面的最大值、最小值的“绝对差值”
    • 每层都要更新最大值、最小值
func maxAncestorDiff(root *TreeNode) int {
    v := root.Val
    return max(dfs(root.Left, v, v), dfs(root.Right, v, v))
}

func dfs(p *TreeNode, minv, maxv int) int {
    if p == nil { return -1 }

    v := p.Val
    res := max(myabs(v - minv), myabs(v - maxv))
    
    minv, maxv = min(minv, v), max(maxv, v)
    return max(res, dfs(p.Left, minv, maxv), dfs(p.Right, minv, maxv))
}

func myabs(x int) int {
    if x < 0 { x *= -1 }
    return x
}
posted @ 2025-09-13 20:38  余越  阅读(6)  评论(0)    收藏  举报