ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

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.Valreturn 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.Valres := 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
}
返回列表