Problem : https://leetcode.com/problems/maximum-difference-between-node-and-ancestor/
Calculate the difference of node.val and the maximum and minimum value from its child trees.
Time complexity = O(N), N = total nodes of the given tree.
/**
* 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) {
return postOrder(root)[2];
}
int[] postOrder(TreeNode node) {
int mi = node.val;
int mx = node.val;
int diff = 0;
for (TreeNode child: new TreeNode[] {node.left, node.right}) {
if (child != null) {
// mi, mx, diff
int[] tmp = postOrder(child);
mi = Math.min(mi, tmp[0]);
mx = Math.max(mx, tmp[1]);
diff = Math.max(diff, tmp[2]);
diff = Math.max(diff, Math.abs(node.val - tmp[0]));
diff = Math.max(diff, Math.abs(node.val - tmp[1]));
}
}
return new int[] {mi, mx, diff};
}
}