2673. 使二叉树所有路径值相等的最小代价(中等)

思路

先看只有3个节点的子树,想要路径值相同,只能修改叶子节点的值,如上图只能2去+1操作。

核心思想:那么对于任意左右孩子节点,想要从根节点下来的路径相同,只能修改孩子节点。

所以我们只需要从下至上记录叶子节点到当前节点的路径值(左孩子,右孩子两条路),然后计算左右节点的差值

详细看灵神树上贪心【力扣周赛 344】_哔哩哔哩_bilibili
代码

class Solution {
private:
    int res=0;
public:
    int minIncrements(int n, vector<int>& cost) {
        helper(n, cost, 0);
        return res;
    }

    int helper(int n, vector<int>& cost, int ind) {
        if(ind >= cost.size())
            return 0;
        int left = helper(n, cost, ind * 2 + 1);
        int right = helper(n, cost, ind * 2 + 2);
        res += abs(left - right);
        return cost[ind] + max(left, right);
    }
};
posted @ 2024-04-01 10:26  Shie1d  阅读(30)  评论(0)    收藏  举报