O(n) time O(h) space
每次更新mx和mn,到nullptr时得到根到叶的一条路径上的最大和最小值,只需要求差即可,对于左右两个子树返回上来的不同路径的最大最小值之差,只需要取较大的那个即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
class Solution { public: int maxAncestorDiff(TreeNode* root) { return dfs(root, root->val, root->val); }
int dfs(TreeNode *root, int mx, int mn) { return root ? max(dfs(root->left, max(mx, root->val), min(mn, root->val)), dfs(root->right, max(mx, root->val), min(mn, root->val))) : mx - mn; } };
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
class Solution { public: int maxAncestorDiff(TreeNode* root) { return dfs(root, root->val, root->val); }
int dfs(TreeNode *root, int mx, int mn) { if (!root) return mx - mn; mx = max(mx, root->val); mn = min(mn, root->val); return max(dfs(root->left, mx, mn), dfs(root->right, mx, mn)); } };
|