1026. Maximum Difference Between Node and Ancestor

Given the root of a binary tree, find the maximum value v for which there exist different nodes a and b where v = |a.val - b.val| and a is an ancestor of b.

A node a is an ancestor of b if either: any child of a is equal to b or any child of a is an ancestor of b.

Example 1:

Input: root = [8,3,10,1,6,null,14,null,null,4,7,13]
Output: 7
Explanation: We have various ancestor-node differences, some of which are given below :
|8 - 3| = 5
|3 - 7| = 4
|8 - 1| = 7
|10 - 13| = 3
Among all possible differences, the maximum value of 7 is obtained by |8 - 1| = 7.

Example 2:

Input: root = [1,null,2,null,0,3]
Output: 3

Constraints:

  • The number of nodes in the tree is in the range [2, 5000].

  • 0 <= Node.val <= 10<sup>5</sup>


Solution

class Solution(object):
    def maxAncestorDiff(self, root)->int:

        return self.helper(root, root.val, root.val)

    def helper(self, r, mn, mx):
        if not r:
            return mx - mn
        mn = min(mn, r.val)
        mx = max(mx, r.val)

        left_diff = self.helper(r.left, mn, mx)
        right_diff = self.helper(r.right, mn, mx)

        return max(left_diff, right_diff)

Second

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = self.right = None
class Solution:
    def maxAncestorDiff(self, root) :
        m=[0]
        self.dfs(root,m)
        return m[0]
    def dfs(self, root, m):
        if not root:
            return float('inf'), float('-inf')

        left = self.dfs(root.left, m)
        right = self.dfs(root.right, m)

        min_val = min(root.val, min(left[0], right[0]))
        max_val = max(root.val, max(left[1], right[1]))

        m[0] = max(m[0], max(abs(min_val - root.val), abs(max_val - root.val)))

        return min_val, max_val

Did you find this article valuable?

Support ANICREATE by becoming a sponsor. Any amount is appreciated!