完全二叉樹的權值

分析:數據結構裏面完全二叉樹關於深度的定理:depth=[log2(index)]+1

#include<bits/stdc++.h>
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層
*/

 

發佈了106 篇原創文章 · 獲贊 136 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章