【正经题解】完全二叉树的权值
2024-02-22 10:16:42
发布于:浙江
11阅读
0回复
0点赞
这个问题要求找出权值之和最大的深度,如果有多个深度的权值和同为最大,输出其中最小的深度。
程序首先读入节点数量 和每个节点的权值数组 。
然后,使用一个循环遍历每一层的节点,计算该层节点的权值之和,并更新最大权值之和和对应的深度。
最后,输出最小深度即可。
#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 1e5 + 10;
typedef long long ll;
int weight[MAX_N];
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> weight[i];
}
int minDepth = 0; // 记录最小深度
ll maxSum = -MAX_N; // 记录最大权值之和
// 遍历每一层的节点
for (int depth = 1, i = 1; i <= n; i *= 2, depth++) {
ll sum = 0;
// 计算该层节点的权值之和
for (int j = i; j <= 2 * i - 1 && j <= n; j++) {
sum += weight[j];
}
// 更新最大权值之和和对应的深度
if (sum >= maxSum) {
maxSum = sum;
minDepth = depth;
}
}
// 输出最小深度
cout << minDepth << endl;
return 0;
}
这里空空如也
有帮助,赞一个