Menu
CoddyTech

Validate Binary Search Tree

Un albero binario è memorizzato nell’array tree in ordine heap: la radice si trova all’indice 0, i figli dell’indice i si trovano a 2*i+1 (sinistro) e 2*i+2 (destro), -1 indica una posizione vuota e l’array può terminare con ulteriori elementi -1.

Scrivi isValidBST, che restituisce true se l’albero è un albero binario di ricerca e false altrimenti. In un albero binario di ricerca, il valore di ogni nodo è strettamente maggiore di ogni valore del suo sottoalbero sinistro e strettamente minore di ogni valore del suo sottoalbero destro.

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 un punto vuoto 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
Leggendo in ordine (sottoalbero sinistro, nodo, sottoalbero destro), i valori sono 1, 3, 6, 8, 10, 12, 15. Aumentano strettamente, quindi ogni nodo si trova dal lato corretto rispetto a ogni antenato.
challenge icon

Per approfondire

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

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

Test #1

Test #2

Test #3

Argomento

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

Output atteso

true