Menu
CoddyTech

Construct Binary Tree from Preorder and Inorder Traversal

Kamu mendapatkan dua array, preorder dan inorder, yang mencantumkan nilai-nilai berbeda dari pohon biner yang sama. Preorder mengunjungi sebuah simpul, lalu subpohon kirinya, kemudian subpohon kanannya. Inorder mengunjungi subpohon kiri, lalu simpulnya, kemudian subpohon kanan.

Bangun kembali pohon tersebut dan kembalikan sebagai array dalam urutan level: akar pada indeks 0, anak-anak dari indeks i pada 2i+1 (kiri) dan 2i+2 (kanan), serta -1 untuk setiap posisi kosong. Array berakhir pada simpul terakhir, tanpa -1 di akhir.

Fungsi

buildTree(preorder: integer-array, inorder: integer-array) → integer-array
preorderinteger-array
nilai dalam urutan preorder: node, subtree kiri, subtree kanan
inorderinteger-array
nilai dalam urutan inorder: subtree kiri, node, subtree kanan
Mengembalikaninteger-array
pohon dalam urutan level, dengan -1 untuk posisi kosong dan tanpa -1 di akhir

Batasan

  • 1 ≤ preorder.length ≤ 3000
  • inorder.length == preorder.length
  • 0 ≤ preorder[i] ≤ 104, dan semua nilainya berbeda.
  • inorder menyimpan nilai yang sama, dan kedua array menggambarkan pohon biner yang sama.
  • Kedalaman pohon paling banyak 14, jadi setiap indeks dalam jawaban kurang dari 214-1 = 16383.

Contoh

Input
preorder = [7, 3, 0, 9, 4, 6]inorder = [0, 3, 9, 7, 4, 6]
Output
[7, 3, 4, 0, 9, -1, 6]
Penjelasan
Preorder dimulai dari akar, 7. Akar ini berada di posisi 3 dalam inorder, jadi 0, 3, 9 berada di kiri dan 4, 6 berada di kanan. 4 hanya memiliki anak kanan, yaitu 6, jadi indeks 5 tetap -1.
challenge icon

Pertanyaan lanjutan

Bisakah kamu membangun kembali pohon tanpa rekursi, dalam satu kali penelusuran preorder dengan stack eksplisit?

Reset kode
def buildTree(preorder, inorder):
    # Tulis kodemu di sini

Tes #1

Tes #2

Argumen

preorder = [7, 3, 0, 9, 4, 6]
inorder = [0, 3, 9, 7, 4, 6]

Output yang diharapkan

[7, 3, 4, 0, 9, -1, 6]