#LAISIR35. 棋盤之上 · 龍域戰爭

棋盤之上 · 龍域戰爭

🎲 題目名稱:棋盤之上 · 龍域戰爭


📝 題目背景:

在一場魔法桌遊《龍域戰爭》中,玩家在一張由魔法棋盤構成的空中平台上展開佈陣。棋盤中央是一顆古老龍魂樹,其節點依照二元結構連接,每個節點代表一個兵種單位。

遊戲規則設計了這樣一個效果:

從上方俯視棋盤時,每個橫向位置只會看到最上層的單位,其下方的單位會被遮擋。

現在你作為遊戲系統的判定器,要即時還原這棵龍魂樹,並判斷在俯視視角下,玩家會看到哪些單位。


🎯 任務說明:

給定一棵龍魂樹的完全先序遍歷(含 "null" 代表空節點),請你重建這棵樹,並輸出從頂視角觀察時能看到的所有節點值

頂視圖的定義為:

  • 根節點的橫向位置為 x = 0
  • 左子節點 x - 1,右子節點 x + 1
  • 每個 x 只輸出第一次從上而下出現的節點

請依照 x 值從小到大輸出這些節點值。


📥 輸入格式:

第一行:整數 n(1 ≤ n ≤ 10^5),表示先序序列長度(包含 "null")

第二行:n 個字串,以空格分隔
- 非空節點為整數(-10^5 到 10^5),代表單位編號
- 空節點為字串 "null"

📤 輸出格式:

一行輸出,為從上往下觀察到的所有節點值,依照橫向位置 x 從小到大排列,以空格分隔。


📘 輸入範例:

13
1 2 4 null null 5 null null 3 null 6 null null

📗 輸出範例:

4 2 1 3 6

🌳 樹結構示意:

重建後的龍魂樹:

        1
      /   \
     2     3
    / \     \
   4   5     6

橫向位置對應:

  • 4 → x = -2
  • 2 → x = -1
  • 1 → x = 0
  • 3 → x = 1
  • 6 → x = 2

頂視圖即為每個 x 的第一個節點(由上往下)