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.
Constraints:
The number of nodes in the tree is in the range [2, 5000].
0 <= Node.val <= 10^5^
给出一个二叉树,找出祖先node与child node差的绝对值的最大值
思路:
注意不是任意节点差的绝对值,而是参与计算的节点a,b中,a必须是b的祖先
所以不能单纯地把所有节点排序
可以这么想,按照祖先与child的顺序遍历,这样就能保存祖先节点的最大值与最小值,当到达null时,就用最大值减最小值,就是差的最大值。
要按照祖先 - child的顺序遍历的话,是先序遍历
要注意的是最大值,最小值不应该声明为全局变量,因为左右子树的最大最小值是不一样的。要声明为local变量。
public int maxAncestorDiff(TreeNode root) {
if(root == null) return 0;
int minVal = root.val;
int maxVal = root.val;
return preOrder(root, minVal, maxVal);
}
int preOrder(TreeNode root, int minVal, int maxVal) {
if(root == null) return (maxVal - minVal);
minVal = Math.min(minVal, root.val);
maxVal = Math.max(maxVal, root.val);
return Math.max(preOrder(root.left, minVal, maxVal), preOrder(root.right, minVal, maxVal));
}