Menu
CoddyTech

Validate Binary Search Tree

Drzewo binarne jest przechowywane w tablicy tree w porządku kopca: korzeń znajduje się pod indeksem 0, dzieci węzła 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 wpisami -1.

Napisz isValidBST, które zwraca true, jeśli drzewo jest binarnym drzewem wyszukiwań, a w przeciwnym razie false. W binarnym drzewie wyszukiwań wartość każdego węzła jest ściśle większa od każdej wartości w jego lewym poddrzewie i ściśle mniejsza od każdej wartości w jego prawym poddrzewie.

Funkcja

isValidBST(tree: integer-array) → boolean
treeinteger-array
drzewo binarne w kolejności poziomami, z wartością -1 oznaczającą puste miejsce
Zwracaboolean
true, jeśli drzewo jest binarnym drzewem wyszukiwania, w przeciwnym razie false

Ograniczenia

  • 1 ≤ tree.length ≤ 32767
  • Każde tree[i] to -1 lub wartość spełniająca warunek 0 ≤ tree[i] ≤ 105.
  • tree[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 po ostatnim węźle.
  • Oboje dzieci pustego miejsca również są puste, a głębokość wynosi najwyżej 14.
  • Wartości mogą się powtarzać.

Przykłady

Wejście
tree = [8, 3, 12, 1, 6, 10, 15]
Wyjście
true
Wyjaśnienie
Odczytane w kolejności (lewe poddrzewo, węzeł, prawe poddrzewo) wartości to 1, 3, 6, 8, 10, 12, 15. Ściśle rosną, więc każdy węzeł znajduje się po właściwej stronie każdego przodka.
challenge icon

Pytanie dodatkowe

Rodzic węzła znajduje się pod indeksem (i-1)/2, zaokrąglonym w dół. Czy potrafisz przejść drzewo w odpowiedniej kolejności, używając dodatkowej pamięci O(1) i przemieszczając się przez rodziców zamiast używać stosu lub rekurencji?

Zresetuj kod
def isValidBST(tree):
    # Napisz kod tutaj

Test #1

Test #2

Test #3

Argument

tree = [8, 3, 12, 1, 6, 10, 15]

Oczekiwany wynik

true