LC每日一题|20240405 - 1026. 节点与其祖先之间的最大差值
给定二叉树的根节点
root,找出存在于 不同 节点A和B之间的最大值V,其中V = |A.val - B.val|,且A是B的祖先。(如果 A 的任何子节点之一为 B,或者 A 的任何子节点是 B 的祖先,那么我们认为 A 是 B 的祖先)
提示:
- 树中的节点数在
2到5000之间。 0 <= Node.val <= 105
题目级别: Medium
还是比较简单的一道题,以前做过,所以直接CV了~
用了一个dfs,保存最大值和最小值~
/**
* Example:
* var ti = TreeNode(5)
* var v = ti.`val`
* Definition for a binary tree node.
* class TreeNode(var `val`: Int) {
* var left: TreeNode? = null
* var right: TreeNode? = null
* }
*/
class Solution {
var res = 0
fun maxAncestorDiff(root: TreeNode?): Int {
dfs(root)
return res
}
fun dfs(root: TreeNode?) : Pair<Int, Int>? {
if (root == null) return null
if (root.left == root.right) return Pair(root.`val`, root.`val`)
var min = root.`val`
var max = root.`val`
dfs(root.left)?.let {
max = Math.max(max, it.first)
min = Math.min(min, it.second)
}
dfs(root.right)?.let {
max = Math.max(max, it.first)
min = Math.min(min, it.second)
}
res = Math.max(res, Math.abs(max - root.`val`))
res = Math.max(res, Math.abs(min - root.`val`))
return Pair(max, min)
}
}