sfondo
Un albero binario è un albero radicato il cui ogni nodo ha al massimo due figli.
Un albero binario etichettato è un albero binario il cui ogni nodo è etichettato con un numero intero positivo; inoltre, tutte le etichette sono distinte .
Un BST (albero di ricerca binario) è un albero binario etichettato in cui l'etichetta di ciascun nodo è maggiore delle etichette di tutti i nodi nella sua sottostruttura sinistra e più piccola delle etichette di tutti i nodi nella sua sottostruttura destra. Ad esempio, il seguente è un BST:
L' attraversamento del preordine di un albero binario etichettato è definito dal seguente pseudo-codice.
function preorder(node)
if node is null then
return
else
print(node.label)
preorder(node.left)
preorder(node.right)
Vedi la seguente immagine per ottenere una migliore intuizione:
I vertici di questo albero binario sono stampati nel seguente ordine:
F, B, A, D, C, E, G, I, H
Puoi leggere di più sui BST qui e di più sull'attraversamento del preordine qui .
Sfida
Dato un elenco di numeri interi , il tuo compito è determinare se esiste un BST il cui attraversamento pre-ordine stampa esattamente .
Ingresso
- Un elenco non vuoto di interi positivi distinti .
- Facoltativamente, la lunghezza di .
Produzione
- Un valore veritiero se è l'attraversamento del pre-ordine di alcuni BST.
- Un valore falso altrimenti.
Regole
- Si applicano le norme standard per invii validi , I / O , scappatoie .
- Questo è code-golf , quindi vince la soluzione più breve (in byte). Come al solito, non lasciare che soluzioni ridicolmente brevi nelle lingue da golf ti scoraggino dal pubblicare una risposta più lunga nella tua lingua preferita.
- Questa non è una regola, ma la tua risposta sarà meglio ricevuta se include un link per testare la soluzione e una spiegazione di come funziona.
Esempi
Input ----> Output
[1] ----> True
[1,2,3,4] ----> True
[5,1,4,2,3] ----> True
[5,4,3,2,1,6,7,8,9] ----> True
[4,2,1,3,6,5,7] ----> True
[8,3,1,6,4,7,10,14,13] ----> True
[2,3,1] ----> False
[6,3,2,4,5,1,8,7,9] ----> False
[1,2,3,4,5,7,8,6] ----> False
[3,1,4,2] ----> False
Controlla questo link (per gentile concessione di Kevin Cruijssen ) per avere uno sguardo visivo gli esempi.