Description:
Given the root of a binary tree, find the maximum value V for which there exists 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:

Input: [8,3,10,1,6,null,14,null,null,4,7,13]
Output: 7
Explanation:
We have various ancestor-node differences, some of which are given below :
|8 - 3| = 5
|3 - 7| = 4
|8 - 1| = 7
|10 - 13| = 3
Among all possible differences, the maximum value of 7 is obtained by |8 - 1| = 7.
Note:
- The number of nodes in the tree is between 2 and 5000.
- Each node will have value between 0 and 100000.
Analysis:
- Define an object variable
maxDiffto denote the solution to the problem. - Define a function
findMaxDiff(TreeNode node, int max, int min)to find the max value ofmaxDiffas well as do the pre-order traversal of this tree. Herenoderepresents the current node,maxandminrepresent the max value and min value of the ancestors ofnoderespecticely. - In each execution of
findMaxDifffunction:
① Update themax,min,maxDiff.
② Recall nextfindMaxDifffunction.
Code:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
private int maxDiff;
public int maxAncestorDiff(TreeNode root) {
if(root == null) {
return maxDiff;
}else{
findMaxDiff(root, root.val, root.val);
return maxDiff;
}
}
public void findMaxDiff(TreeNode node, int max, int min) {
if(node == null) {
return;
}else{
if(node.val > max) {
max = node.val;
}
if(node.val < min) {
min = node.val;
}
int diff = max - min;
if(diff > maxDiff) {
maxDiff = diff;
}
if(node.left != null) {
findMaxDiff(node.left, max, min);
}
if(node.right != null) {
findMaxDiff(node.right, max, min);
}
}
}
}
本文探讨了在二叉树中寻找最大祖先差值的问题,即找到两个节点A和B,使得A是B的祖先且两者值之差最大。通过递归遍历树并记录每个节点的祖先的最大和最小值,最终找到最大的差值。
195

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



