藍橋杯第十屆省賽 試題G 完全二叉樹的權值

2021-10-23 09:51:32 字數 1426 閱讀 2972

【問題描述】

給定一棵包含 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的情況 啊啊啊啊!第九...