二叉树最大路径和

二叉树最大路径和

class Solution {
    int maxSum = INT_MIN;
public:
    int getAns(TreeNode *root){
        if(root == nullptr) return 0;
        int left = max(getAns(root->left),0);
        int right = max(getAns(root->right),0);
        int lmr = root->val + left + right;
        maxSum = max(maxSum,lmr);
        return root->val + max(left,right);
    }
    int maxPathSum(TreeNode* root) {
        getAns(root);
        return maxSum;
    }
};

去掉一个端点的最大路径和

class Solution {
public:
    long long maxOutput(int n, vector<vector<int>>& edges, vector<int>& price) {
        vector<vector<int>> g(n);
        for(auto &e:edges){
            g[e[0]].push_back(e[1]);
            g[e[1]].push_back(e[0]);
        }
        long long ans = 0;
        function<pair<long long, long long>(int, int)> dfs = [&](int x,int fa)->pair<long long, long long>{
            long long val = price[x],max_with = val,max_no = 0;
            for(auto &y:g[x]){
                if(y == fa)continue;
                auto [s_with,s_no] = dfs(y,x);
                ans = max({ans,s_with + max_no,s_no + max_with});
                max_with = max(max_with,s_with + val);
                max_no = max(max_no,s_no + val);
            }
            return {max_with,max_no};
        };
        dfs(0,-1);
        return ans;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值