LC每日一题|20240405 - 1026. 节点与其祖先之间的最大差值

80 阅读1分钟

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)
    }
}