题目描述
- 给定一棵二叉树,找到最大的“节点与其祖先节点的差值的绝对值”
示例
输入: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
}