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));
}
该博客讨论了一种解决二叉树问题的方法,即找到树中节点的最大祖先差值,其中祖先节点是某个节点的父节点或其任何祖先。通过使用先序遍历并维护当前路径上的最小值和最大值,可以在遍历过程中计算出最大差值。博主提供了Java代码实现,强调了在递归过程中局部变量的重要性。
1397

被折叠的 条评论
为什么被折叠?



