【問題描述】
給定一棵包含 n 個節點的完全二叉樹,樹上每個節點都有乙個權值,按從
上到下、從左到右的順序依次是 a1, a2, · · · an,如下圖所示:
現在小明要把相同深度的節點的權值加在一起,他想知道哪個深度的節點
權值之和最大?如果有多個深度的權值和同為最大,請你輸出其中最小的深度。
注:根的深度是 1。
【輸入格式】
第一行包含乙個整數 n。
第二行包含 n 個整數 a1, a2, · · · an 。
【輸出格式】
輸出乙個整數代表答案。
【樣例輸入】7
1 6 5 4 3 2 1
【樣例輸出】
【評測用例規模與約定】
對於所有評測用例,1 ≤ n ≤ 100000, 100000 ≤ ai ≤ 100000。
【思路解析】
此題主要了解的點就是關於二叉樹的性質,關於二叉樹你要知道深度為n的完全二叉樹的第 i 層的最大節點數為 2^(i-1) 個,深度為 n 的完全二叉樹最多擁有 2^n - 1 個節點,只要想發得出每層的權值和就可做出這道題,題目還給了乙個限制條件是最大節點n≤100000,由滿二叉樹性質,17 層的完全二叉樹最大節點數為 2^17 - 1 = 131071,已經大於給定的n的範圍,所以此題的二叉樹層數不會超過18層(為什麼是18不是17 ? 二叉樹性質給定定義的第一層為0層,而題目給定第一層為1層,所以需要+1)。
#include
#include
using
namespace std;
const
int max_deep =18;
//定義最大層數18
long
long temp[max_deep +1]
;//陣列取稍大
// 計算所給節點對應的深度
intgetdeep
(int n)
return res;
}int
main()
int maxnum=
-1000
, resdeep;
//定義的節點最大值maxnum必須相對小,小於所有節點值
for(
int j =
1; j <= max_deep; j++)}
cout << resdeep << endl;
return0;
}
第十屆藍橋杯省賽 完全二叉樹的權值 清晰!!!)
給定一棵包含 n 個節點的完全二叉樹,樹上每個節點都有乙個權值,按從上到下 從左到右的順序依次是 a1,a2,an,如下圖所示 現在小明要把相同深度的節點的權值加在一起,他想知道哪個深度的節點權值之和最大?如果有多個深度的權值和同為最大,請你輸出其中最小的深度。注 根的深度是 1。輸入格式 第一行包...
第十屆藍橋杯省賽C B組 組隊
試題 a 組隊 本題總分 5 分 問題描述 作為籃球隊教練,你需要從以下名單中選出 1 號位至 5 號位各一名球員,組成球隊的首發陣容。每位球員擔任 1 號位至 5 號位時的評分如下表所示。請你計算首發陣容 1 號位至 5 號位的評分之和最大可能是多少?如果你把以上文字複製到文字檔案中,請務必檢查複...
2019第十屆藍橋杯省賽 賽後反思
太菜了!太菜了!太菜了!太飄了!太飄了!太飄了!又菜又膨脹!唉,本來可以省一的,太膨脹了,居然都沒有認真的去想特殊案例。比賽剛開始的時候還很認真的,看了前幾個題,感覺好簡單,就開始膨脹了。結果。第四題就錯了。第七題忘了有沒有考慮負數了 估計沒有考慮 第八題居然沒有考慮到公差為0的情況 啊啊啊啊!第九...