a296. TOI 2022/12 潛力組:二元搜尋樹復原

中等TOI 歷屆

時間限制 2000 ms ・ 記憶體限制 256 MB

題目描述

一棵非空的二元搜尋樹中,每個節點存有一個整數,所有節點的值都不相同。每個節點最多有一個左子節點與一個右子節點,而且必須符合下列規則:

  • 左子樹內的所有值都小於目前節點的值。
  • 右子樹內的所有值都大於目前節點的值。
  • 每棵子樹也遵守相同的規則,左右子樹的位置不能互換。

對這棵樹進行後序走訪時,先走訪左子樹,再走訪右子樹,最後記錄目前節點的值;不存在的子樹直接略過。

現在給你這棵樹的後序走訪結果。請還原各節點的父子關係,找出每個節點的父節點。根節點沒有父節點,以 -1 表示。

輸入格式

第一行是一個正整數 N,表示節點數量。 第二行包含 N 個以空白分隔的正整數 P₁、P₂、…、Pₙ,依序為後序走訪所記錄的值。

  • 1 ≤ N ≤ 200000
  • 1 ≤ Pᵢ ≤ 1000000000
  • 所有 Pᵢ 互不相同;此序列來自一棵符合題意的二元搜尋樹。

輸出格式

輸出 N 行,每行包含兩個以空白分隔的整數 U 與 F,表示值為 U 的節點,其父節點的值為 F。若 U 是根節點,F 為 -1。

請按照 U 由小到大的順序輸出,每個節點恰好出現一次。

來源

TOI 2022 年 12 月潛力組〈二元搜尋樹復原(BST)〉。本題敘以自寫文字重述;公開範例與隱藏測資均另行設計。 https://tpmso.k12ea.gov.tw/toi/wp-content/uploads/question/202212/BST.pdf

範例測資

範例輸入 1

9
10 30 40 35 20 65 90 80 50

範例輸出 1

10 20
20 50
30 35
35 20
40 35
50 -1
65 80
80 50
90 80
請先登入後再提交程式碼

討論與題解

載入討論區…

更多