解题思路:
(1)保存每个子树中的节点最大值和最小值
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<int> dfs(TreeNode *root,int &maxs) {
if(root==NULL) return {-1,-1};
vector<int> l=dfs(root->left,maxs);
vector<int> r=dfs(root->right,maxs);
if(l[0]==-1 && r[0]==-1) return {root->val,root->val};
else if(l[0]==-1) {
int root_min = min(r[0],root->val);
int root_max = max(r[1],root->val);
int temp = max(abs(root->val-r[0]),abs(root->val-r[1]));
if(temp>maxs) maxs=temp;
return {root_min,root_max};
} else if(r[0]==-1) {
int root_min = min(l[0],root->val);
int root_max = max(l[1],root->val);
int temp = max(abs(root->val-l[0]),abs(root->val-l[1]));
if(temp>maxs) maxs=temp;
return {root_min,root_max};
} else {
int root_min = min(min(l[0],r[0]),root->val);
int root_max = max(max(l[1],r[1]),root->val);
int temp = max(max(max(abs(root->val-l[0]),abs(root->val-l[1])),abs(root->val-r[0])),abs(root->val-r[1]));
if(temp>maxs) maxs=temp;
return {root_min,root_max};
}
}
int maxAncestorDiff(TreeNode* root) {
int maxs = 0;
dfs(root,maxs);
return maxs;
}
};