1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| class Solution { private static class Result { private int maxDiff; }
public int maxAncestorDiff(TreeNode root) { Result result = new Result(); dfs(result, root, null, null); return result.maxDiff; }
private void dfs(Result result, TreeNode node, Integer min, Integer max) { if (node == null) { return; }
if (min != null) { result.maxDiff = Math.max(result.maxDiff, Math.abs(node.val - min)); } if (max != null) { result.maxDiff = Math.max(result.maxDiff, Math.abs(max - node.val)); }
min = min == null ? node.val : Math.min(min, node.val); max = max == null ? node.val : Math.max(max, node.val);
dfs(result, node.left, min, max); dfs(result, node.right, min, max); } }
|