Menu
CoddyTech

Subtree of Another Tree

Otrzymujesz dwa drzewa binarne: root i subRoot, każde zapisane w tablicy w kolejności poziomami: korzeń znajduje się pod indeksem 0, dzieci elementu o indeksie i pod indeksami 2*i+1 (lewe) i 2*i+2 (prawe), a -1 oznacza puste miejsce. Tablica może kończyć się dodatkowymi wpisami -1.

Zwróć true, jeśli jakiś węzeł w root wraz ze wszystkimi jego potomkami ma dokładnie taki sam kształt i wartości jak subRoot, a w przeciwnym razie zwróć false. Liczy się również całe drzewo root.

Funkcja

isSubtree(root: integer-array, subRoot: integer-array) → boolean
rootinteger-array
drzewo do przeszukania, w kolejności poziomami, z wartością -1 w pustym miejscu
subRootinteger-array
drzewo, którego należy szukać, w tym samym formacie
Zwracaboolean
true, jeśli subRoot występuje w root jako węzeł ze wszystkimi swoimi potomkami, w przeciwnym razie false

Ograniczenia

  • 1 ≤ root.length ≤ 32767 oraz 1 ≤ subRoot.length ≤ 32767
  • Każdy wpis to -1 lub wartość z zakresu od 0 do 104.
  • root[0] i subRoot[0] nigdy nie są równe -1, więc oba drzewa mają co najmniej jeden węzeł.
  • Każda z tablic może kończyć się dodatkowymi wpisami -1 za swoim ostatnim węzłem.
  • Oboje dzieci pustego miejsca również są puste, a każde drzewo ma głębokość co najwyżej 14.
  • Wartości mogą się powtarzać.

Przykłady

Wejście
root = [6, 2, 8, 1, 3, -1, 9]subRoot = [2, 1, 3]
Wyjście
true
Wyjaśnienie
Węzeł 2 o indeksie 1 ma dzieci 1 i 3, a oba są liśćmi. To właśnie subRoot.
challenge icon

Pytanie dodatkowe

Czy potrafisz utworzyć odcisk palca każdego poddrzewa na podstawie jego wartości i odcisków palców jego dzieci, tak aby porównanie z subRoot miało koszt O(1)? Co zrobisz, gdy dwa różne poddrzewa dadzą kolizję?

Zresetuj kod
def isSubtree(root, subRoot):
    # Wpisz kod tutaj

Test #1

Test #2

Test #3

Argumenty

root = [6, 2, 8, 1, 3, -1, 9]
subRoot = [2, 1, 3]

Oczekiwany wynik

true