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:
/**
* 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)