#LAISIR15. 平衡化二元搜尋樹

平衡化二元搜尋樹

📘 題目名稱:平衡化二元搜尋樹(輸入先序,輸出層序)

📝 題目描述:

給定一棵二元搜尋樹(BST)的「完全先序遍歷結果」,請你還原這棵 BST,然後返回一棵平衡的 BST,其節點值與原樹完全相同,但結構需為平衡型。

你可以返回任意一棵符合條件的平衡 BST。

一棵 BST 是平衡的,當所有節點的左子樹與右子樹的高度差不超過 1。


📥 輸入格式:

輸入共兩行:

  • 第一行:一個整數 n,代表接下來有幾個節點(包含 "null"
  • 第二行:n 個以空格分隔的字串,為完全先序遍歷的結果,節點值為正整數或 "null"(字串)

範例:

7
1 null 2 null 3 null 4

📤 輸出格式:

一行,一個陣列,為結果平衡 BST 的**層序遍歷(Level-order traversal)**結果,其中 "null" 表示空節點。結尾需補齊 "null" 直到最後一個非空節點為止。

範例:

2 1 3 null null null 4

🔍 範例 1:

輸入:

7
1 null 2 null 3 null 4

輸出:

2 1 3 null null null 4

🔍 範例 2:

輸入:

3
2 1 3

輸出:

2 1 3

📌 限制條件:

  • 1 ≤ n ≤ 2 × 10⁴
  • 1 ≤ Node.val ≤ 10⁵
  • 節點值不重複
  • 第二行為完全先序遍歷結果,包含 "null" 表示空節點
  • 輸出需為完整的層序遍歷結果,以 "null" 補足所有空位直到最後一個非空節點