Menu
CoddyTech

Validate Binary Search Tree

Ti viene dato un albero binario memorizzato nell'array tree in ordine per livelli. La radice si trova all'indice 0, i figli del nodo all'indice i si trovano agli indici 2*i+1 (sinistro) e 2*i+2 (destro), -1 indica una posizione vuota e l'array può terminare con ulteriori voci -1.

Scrivi una funzione chiamata isValidBST che restituisca true se l'albero è un albero di ricerca binaria e false altrimenti. In un albero di ricerca binaria, il valore di ogni nodo è strettamente maggiore di tutti i valori del suo sottoalbero sinistro e strettamente minore di tutti i valori del suo sottoalbero destro. Due valori uguali non possono mai trovarsi entrambi in un albero valido.

Funzione

isValidBST(tree: integer-array) → boolean
treeinteger-array
l’albero binario in ordine per livelli, con -1 per una posizione vuota
Restituisceboolean
vero se l'albero è un albero binario di ricerca, falso altrimenti

Vincoli

  • 1 ≤ tree.length ≤ 32767
  • Ogni tree[i] è -1 oppure un valore con 0 ≤ tree[i] ≤ 105.
  • tree[0] non è mai -1, quindi l'albero ha almeno un nodo.
  • L'array può terminare con voci -1 aggiuntive dopo l'ultimo nodo.
  • Entrambi i figli di una posizione vuota sono vuoti a loro volta, e la profondità è al massimo 14.
  • I valori possono ripetersi.

Esempi

Input
tree = [8, 3, 12, 1, 6, 10, 15]
Output
true
Spiegazione
Ogni nodo si trova sul lato corretto di ogni nodo sopra di esso. Leggendo in ordine (sottoalbero sinistro, nodo, sottoalbero destro), i valori risultano 1, 3, 6, 8, 10, 12, 15, strettamente crescenti, come accade in un albero di ricerca.

lock icon+16 test nascosti all’invio

challenge icon

Per approfondire

Il genitore del nodo all’indice i si trova in (i-1)/2, arrotondato per difetto. Riesci a percorrere l’albero in ordine con spazio aggiuntivo O(1), spostandoti tra i genitori invece di mantenere uno stack o usare la ricorsione?

Ripristina il codice
def isValidBST(tree):
    # Scrivi il codice qui
Casi di test

Caso 1

Caso 2

Caso 3

Input

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

Atteso

true