1026. 节点与其祖先之间的最大差值

链接: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;
    }
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值