Menu
CoddyTech

Vertical Order Traversal of a Binary Tree

Drzewo binarne jest przechowywane w tablicy root w kolejności kopcowej: korzeń znajduje się pod indeksem 0, dzieci elementu o indeksie i znajdują się pod indeksami 2*i+1 (lewe) i 2*i+2 (prawe), -1 oznacza puste miejsce, a tablica może kończyć się dodatkowymi elementami -1.

Korzeń znajduje się w kolumnie 0; lewe dziecko znajduje się o jedną kolumnę w lewo od rodzica, a prawe dziecko o jedną kolumnę w prawo. Zwróć po jednej liście dla każdej kolumny, od lewej do prawej. W obrębie kolumny wymień węzły od góry do dołu, a węzły znajdujące się w tej samej kolumnie i na tej samej głębokości — w kolejności rosnącej wartości.

Funkcja

verticalTraversal(root: integer-array) → integer-2d-array
rootinteger-array
drzewo w porządku kopcowym, z -1 oznaczającym puste miejsce
Zwracainteger-2d-array
jedna lista wartości na kolumnę, zaczynając od kolumny skrajnie lewej, każda od góry do dołu

Ograniczenia

  • 1 ≤ root.length ≤ 32767
  • Każde root[i] ma wartość -1 lub wartość spełniającą warunek 0 ≤ root[i] ≤ 5000, a żadna wartość nie występuje dwukrotnie.
  • root[0] nigdy nie jest równe -1, więc drzewo ma co najmniej jeden węzeł.
  • Tablica może kończyć się dodatkowymi wpisami -1 za ostatnim węzłem.
  • Oboje dzieci pustego miejsca również są puste, a drzewo ma co najwyżej 14 poziomów.

Przykłady

Wejście
root = [5, 2, 9, 4, 7, 1, 6]
Wyjście
[[4], [2], [5, 1, 7], [9], [6]]
Wyjaśnienie
Kolumna 0 zawiera korzeń 5, a dwa poziomy niżej znajdują się 7 i 1. Te dwie wartości mają tę samą kolumnę i głębokość, więc 1 występuje przed 7, mimo że 7 znajduje się bardziej na lewo.
challenge icon

Pytanie dodatkowe

Każda wartość jest nie większa niż 5000. Czy możesz wykorzystać tę informację, aby pominąć sortowanie porównawcze i zakończyć działanie w czasie O(n + 5000)?

Zresetuj kod
def verticalTraversal(root):
    # Wpisz kod tutaj

Test #1

Test #2

Test #3

Argument

root = [5, 2, 9, 4, 7, 1, 6]

Oczekiwany wynik

[[4], [2], [5, 1, 7], [9], [6]]