题目链接
英文链接:https://leetcode.com/problems/maximum-difference-between-node-and-ancestor/
中文链接:https://leetcode-cn.com/problems/maximum-difference-between-node-and-ancestor/
题目详述
给定二叉树的根节点 root
,找出存在于不同节点 A
和 B
之间的最大值 V
,其中 V = |A.val - B.val|
,且 A
是 B
的祖先。
(如果 A 的任何子节点之一为 B,或者 A 的任何子节点是 B 的祖先,那么我们认为 A 是 B 的祖先)
示例:
1 | 输入:[8,3,10,1,6,null,14,null,null,4,7,13] |
提示:
- 树中的节点数在
2
到5000
之间。 - 每个节点的值介于
0
到100000
之间。
题目详解
方法一:自底向上的计算方法。
- 如果对于每一个节点,我们知道它的左子树中结点最小值和最大值、它的右子树中结点最小值和最大值,那么由当前结点作为祖先结点的最大值可以很容易求出。
- 可以实现一个求子树最小值和最大值的方法,在递归过程中不断更新结果。
1 | public class LeetCode_01026 { |
方法一:自顶向下的计算方法。
- 可以换一种思路,把当前路径上的最小值和最大值往下传递,并进行更新。
- 到达当前结点时,已经知道从根结点到当前结点的最小值和最大值,这样可以直接更新结果。
1 | public class LeetCode_01026 { |
自顶向下的计算方法的另一种更简洁写法。
1 | public class LeetCode_01026 { |