#LAISIR38. 棋盤之下 · 高塔對決
棋盤之下 · 高塔對決
🧮 題目名稱:棋盤之下 · 高塔對決
📝 題目背景:
在戰棋遊戲《幻域高塔》中,玩家以一棵二元軍事建築樹來佈局棋盤上的高塔單位。每個單位佔據棋盤上的一格位置,並具有一個代表其「高度」的數值。
整棵軍事樹從上往下建構,左子節點代表位於棋盤左側的單位,右子節點則位於右側。遊戲結束時,系統將從棋盤底部往上觀察整個佈陣,並輸出在每個橫向位置上,高度最高的單位編號。
🎯 任務說明:
請你根據軍事建築的完全先序遍歷序列(包含空節點 "null"),建構這棵樹,並計算從底部觀察時能看到的單位。
觀察規則如下:
- 根節點位於橫向位置 x = 0。
- 左子節點橫向位置為 x - 1,右子節點為 x + 1。
- 每個位置上只能看到高度最高的單位。
- 若某個位置從未有單位佔據,則不輸出任何內容。
- 多個單位佔據同一位置時,以高度較大者為準。
📥 輸入格式:
第一行一個整數 n
(1 ≤ n ≤ 10^5):先序遍歷節點數量(包含 "null"
)。
接下來 n 行,每行一個節點資訊,格式如下:
- 若為非空節點:
id height
(字串+整數),例如:A 5
- 若為空節點:字串
"null"
說明:
id
為不含空格的英數編號,長度不超過 10。height
為 1 ≤ height ≤ 10^5 的整數。- 編號互不相同。
- 輸入保證能構成一棵合法的二元樹。
📤 輸出格式:
一行,輸出所有從棋盤底部能看到的單位編號(id
),依橫向位置 x 從小到大排列,中間以空格分隔。
📘 範例輸入:
13
A 5
B 3
D 6
null
null
E 4
null
null
C 2
null
F 7
null
null
📗 範例輸出:
D B A F
🌳 樹形結構說明:
根據先序遍歷重建的樹為:
A(5)
/ \
B(3) C(2)
/ \ \
D(6) E(4) F(7)
橫向位置與節點分佈如下:
x 座標 | 節點序列 | 高度最高者 |
---|---|---|
-2 | D(6) | D |
-1 | B(3) | B |
0 | A(5), E(4) | A |
1 | C(2) | C |
2 | F(7) | F |
最終輸出為從 x = -2 到 x = 2 中每個位置的最高者(跳過 C 因其未覆蓋任何新的 x):
D B A F
Related
In following homework: