完全二叉树的权值

完全二叉树的权值_第1张图片

完全二叉树的权值_第2张图片

分析:数据结构里面完全二叉树关于深度的定理:depth=[log2(index)]+1

#include
using namespace std;
const int maxn = 100005;//最大范围
int num[maxn];
long long ans[30];//maxn<100005,深度最大不超过17,GetDepth(maxn)==17

///*数据结构里面完全二叉树深度是有定理公式的[log2(index)]+1*///
int GetDepth(int index) {
	return floor(log2(index)) + 1;
}
int main() {
	int n;
	//输入
	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> num[i];
	//计算
	int maxSumDepth = 1;//和值最大的深度
	int maxDepth = GetDepth(n);//当前完全二叉树最大深度
	memset(ans, 0, sizeof(ans));//树每层和值初始化为0
	for (int i = 1; i <= n; i++) {//遍历树的每个结点值
		int currentDepth = GetDepth(i);//根据下标求得该结点的深度值
		ans[currentDepth] += num[i];//深度值一致的进行累和
		maxSumDepth = ans[currentDepth] > ans[maxSumDepth] ? currentDepth : maxSumDepth;//有最大累和值出现就替换最大和值的深度
	}
	//输出
	cout << maxSumDepth << endl;
	return 0;
}
/*
样例1:
7
1 6 5 4 3 2 1
结果:2层
样例2:
7
9 4 4 2 2 2 1
结果:1层
样例3:
7
9 4 4 3 3 3 1
结果:3层
样例4:
15
9 4 6 3 3 3 2 1 1 1 1 1 1 1 1
结果:3层
*/

 

你可能感兴趣的:(算法,数据结构,算法,蓝桥杯,满二叉树深度,数据结构)