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);
}
};

浙公网安备 33010602011771号