Skip to content

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:

img

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:

img

Input: root = [1,null,2,null,0,3]
Output: 3
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public int maxAncestorDiff(TreeNode root) {
        // base case 
        if (root == null){
            return 0;
        }

        return helper(root, root.val, root.val);
    }

    private static int helper(TreeNode root, int curMax, int curMin){
        // base case
        if (root == null){
            return (curMax - curMin);
        }

        // recursive rule
        curMax = Math.max(curMax, root.val);
        curMin = Math.min(curMin, root.val);

        int left = helper(root.left, curMax, curMin);
        int right = helper(root.right, curMax, curMin);
        return Math.max(left, right);
    }
}

// TC: O(n)
// SC: O(n)