链接:https://leetcode-cn.com/problems/maximum-difference-between-node-and-ancestor/
题解:就一个节点来说所谓最大差值,就是祖先的最大值或者最小值和自己的val的差值。
只需要知道所有祖先可能的最大值和最小值,在遍历时携带传递即可
/**
* * Definition for a binary tree node.
* * struct TreeNode {
* * int val;
* * TreeNode *left;
* * TreeNode *right;
* * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* * };
* */
class Solution {
public:
int maxAncestorDiff(TreeNode* root) {
if(root == nullptr) {
return 0;
}
int result = INT_MIN;
find_max_diff(root, root->val, root->val, result);
return result;
}
void find_max_diff(TreeNode* root, int upper, int lower, int &result) {
if(root == nullptr) {
return;
}
// 计算最大的diff
int max_diff = max(abs(upper-root->val), abs(lower-root->val));
result = max(result, max_diff);
// 判断root节点之上,最大的数值
upper = max(upper, root->val);
// 判断root节点之上,最小的数值
lower = min(lower, root->val);
find_max_diff(root->left, upper, lower, result);
find_max_diff(root->right, upper, lower, result);
return;
}
};