Maximum Difference Between Node and Ancestor
Given 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.
Example 1
Input: root=[8,3,10,1,6,null,14,null,null,4,7,13] → Output: 7
Example 2
Input: root=[1,null,2,null,0,3] → Output: 3
Solution Approach
DFS: pass the current minimum and maximum values seen on the path from root to current node. At each leaf, the answer candidate is max - min.
- dfs(node, minVal, maxVal):
- If node==null: return maxVal - minVal.
- Update minVal = min(minVal, node.val), maxVal = max(maxVal, node.val).
- Return max(dfs(left, minVal, maxVal), dfs(right, minVal, maxVal)).
Java
class Solution {
public int maxAncestorDiff(TreeNode root) {
return dfs(root, root.val, root.val);
}
private int dfs(TreeNode node, int minVal, int maxVal) {
if (node == null) return maxVal - minVal;
minVal = Math.min(minVal, node.val);
maxVal = Math.max(maxVal, node.val);
return Math.max(dfs(node.left, minVal, maxVal), dfs(node.right, minVal, maxVal));
}
}
- Time Complexity: O(N)
- Space Complexity: O(H)