Menu
CoddyTech

Construct Binary Tree from Preorder and Inorder Traversal

Otrzymujesz dwie tablice, preorder i inorder, zawierające różne wartości tego samego drzewa binarnego. Przejście preorder odwiedza węzeł, następnie jego lewe poddrzewo, a potem prawe poddrzewo. Przejście inorder odwiedza lewe poddrzewo, następnie węzeł, a potem prawe poddrzewo.

Odtwórz drzewo i zwróć je jako tablicę w kolejności poziomami: korzeń pod indeksem 0, dzieci elementu o indeksie i pod indeksami 2i+1 (lewe) i 2i+2 (prawe), a dla każdego pustego miejsca wartość -1. Tablica kończy się na ostatnim węźle, bez końcowych wartości -1.

Funkcja

buildTree(preorder: integer-array, inorder: integer-array) → integer-array
preorderinteger-array
wartości w porządku preorder: węzeł, lewe poddrzewo, prawe poddrzewo
inorderinteger-array
wartości w kolejności inorder: lewe poddrzewo, węzeł, prawe poddrzewo
Zwracainteger-array
drzewo w kolejności poziomami, z wartością -1 dla pustych miejsc i bez końcowych wartości -1

Ograniczenia

  • 1 ≤ preorder.length ≤ 3000
  • inorder.length == preorder.length
  • 0 ≤ preorder[i] ≤ 104, a wszystkie wartości są różne.
  • inorder zawiera te same wartości, a obie tablice opisują to samo drzewo binarne.
  • Głębokość drzewa wynosi co najwyżej 14, więc każdy indeks w odpowiedzi jest mniejszy niż 214-1 = 16383.

Przykłady

Wejście
preorder = [7, 3, 0, 9, 4, 6]inorder = [0, 3, 9, 7, 4, 6]
Wyjście
[7, 3, 4, 0, 9, -1, 6]
Wyjaśnienie
Preorder zaczyna się od korzenia, 7. Znajduje się on na pozycji 3 w inorder, więc 0, 3, 9 trafiają w lewo, a 4, 6 w prawo. 4 ma tylko prawe dziecko, 6, więc indeks 5 pozostaje równy -1.
challenge icon

Pytanie dodatkowe

Czy potrafisz odbudować drzewo bez rekurencji, podczas jednego przejścia po preorder, używając jawnego stosu?

Zresetuj kod
def buildTree(preorder, inorder):
    # Wpisz kod tutaj

Test #1

Test #2

Argumenty

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

Oczekiwany wynik

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