Menu
CoddyTech

Construct Binary Tree from Preorder and Inorder Traversal

Size aynı ikili ağacın farklı değerlerini listeleyen iki dizi, preorder ve inorder, veriliyor. Preorder dolaşımında önce bir düğüm, sonra sol alt ağacı, ardından sağ alt ağacı ziyaret edilir. Inorder dolaşımında ise önce sol alt ağaç, sonra düğüm, ardından sağ alt ağaç ziyaret edilir.

Ağacı yeniden oluştur ve seviye sırasına göre bir dizi olarak döndür: kök 0 indeksinde, i indeksindeki düğümün çocukları sırasıyla 2i+1 (sol) ve 2i+2 (sağ) indekslerinde, her boş konum için -1 bulunur. Dizi son düğümde biter; sonunda -1 bulunmaz.

Fonksiyon

buildTree(preorder: integer-array, inorder: integer-array) → integer-array
preorderinteger-array
ön sıralı dolaşımdaki değerler: düğüm, sol alt ağaç, sağ alt ağaç
inorderinteger-array
inorder içindeki değerler: sol alt ağaç, düğüm, sağ alt ağaç
Döndürürinteger-array
seviye sırasına göre ağaç; boş yerler için -1 kullanın ve sonda -1 bulunmasın

Kısıtlar

  • 1 ≤ preorder.length ≤ 3000
  • inorder.length == preorder.length
  • 0 ≤ preorder[i] ≤ 104 ve tüm değerler birbirinden farklıdır.
  • inorder aynı değerleri tutar ve her iki dizi de aynı ikili ağacı tanımlar.
  • Ağacın derinliği en fazla 14 olduğundan, cevaptaki her indeks 214-1 = 16383 değerinden küçüktür.

Örnekler

Girdi
preorder = [7, 3, 0, 9, 4, 6]inorder = [0, 3, 9, 7, 4, 6]
Çıktı
[7, 3, 4, 0, 9, -1, 6]
Açıklama
Ön sipariş kökle, 7 ile başlar. inorder konumu 3'te bulunur; bu nedenle 0, 3, 9 sola, 4, 6 sağa gider. 4'ün yalnızca 6 adlı bir sağ çocuğu vardır; bu yüzden 5 indeksi -1 olarak kalır.
challenge icon

Ek soru

Özyineleme kullanmadan, preorder üzerinde tek geçişte ve açık bir yığın kullanarak ağacı yeniden oluşturabilir misin?

Kodu sıfırla
def buildTree(preorder, inorder):
    # Kodu buraya yazın

Test #1

Test #2

Argümanlar

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

Beklenen Çıktı

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