LC.P2673[使二叉树所有路径值相等的最小代价]

方法一:贪心

根节点到每个叶子节点的路径值相等,实际上等价于以任意节点为根节点的子树到该子树的每个叶子节点的路径值相等。

1
2
3
4
5
6
7
8
9
10
class Solution {
public int minIncrements(int n, int[] cost) {
int ans = 0;
for (int i = n / 2; i > 0; --i) {
ans += Math.abs(cost[2 * i - 1] - cost[2 * i]); // 使两个子节点的值变成一样
cost[i - 1] += Math.max(cost[2 * i - 1], cost[2 * i]); // 累加路径和
}
return ans;
}
}
  • 时间复杂度:$O(n)$
  • 空间复杂度:$O(1)$