Problem
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
.
Example 1:
1 | Input: root = [8,3,10,1,6,null,14,null,null,4,7,13] |
Example 2:
1 | Input: root = [1,null,2,null,0,3] |
Constraints:
- The number of nodes in the tree is in the range
[2, 5000]
. 0 <= Node.val <= 105
Analysis
这道二叉树的题目要求计算出两个节点最大的差的绝对值,同时要求这两个节点是父子关系。如果先不考虑第二个条件,做法就很简单了,对整棵树进行遍历,分别维护当前最大值和最小值,然后每个节点都去做差,保留最大的结果就是答案。
但是有了第二条件,需要排除掉同级的情况。我在想需要用什么方法去解决这个问题,但是发现实际上遍历的方式就天然地解决了这个问题。上面说的维护当前最大值和最小值是对于某颗子树而言的,所以在左子树的最大值或最小值是不会影响右子树的,这样分析后问题就变得非常简单了。
Solution
无
Code
1 | /** |
Summary
这道二叉树的题目虽然背景有点特殊,但是实际coding起来是非常简单的。在使用前序遍历保证了最大值和最小值的作用范围后,找出最大的绝对值就非常简单。这道题目的分享到这里,谢谢!