tło
Binarne drzewo jest zakorzenione drzewo której każdy węzeł ma co najwyżej dwoje dzieci.
Oznaczone drzewo binarne to drzewo binarne której każdy węzeł jest oznaczony liczbą całkowitą dodatnią; ponadto wszystkie etykiety są odrębne .
BST (binarne drzewo poszukiwań) jest oznaczony drzewo binarne, w którym etykieta każdego węzła jest większa niż etykietach wszystkich węzłów w jego lewym poddrzewie, a mniejszy niż etykietach wszystkich węzłów w jego prawym poddrzewie. Na przykład następujące BST:
Przejścia pre-order z oznaczonego drzewa binarnego jest określona według następującego pseudo-kodu.
function preorder(node)
if node is null then
return
else
print(node.label)
preorder(node.left)
preorder(node.right)
Zobacz poniższy obraz, aby uzyskać lepszą intuicję:
Wierzchołki tego drzewa binarnego są drukowane w następującej kolejności:
F, B, A, D, C, E, G, I, H
Możesz przeczytać więcej o BST tutaj , a więcej o przechodzeniu w przedsprzedaży tutaj .
Wyzwanie
Biorąc pod uwagę listę liczb całkowitych , Twoim zadaniem jest ustalenie, czy istnieje BST, którego podróż w przedsprzedaży drukuje dokładnie .
Wkład
- Niepusta lista wyraźnych liczb całkowitych dodatnich .
- Opcjonalnie długość .
Wydajność
- Truthy wartość jeśli jest przechodzenie pre-order od jakiegoś BST.
- W przeciwnym razie wartość falsey .
Zasady
- Standardowe zasady dla prawidłowych zgłoszeń , I / O , luki zastosowania.
- To jest golf golfowy , więc wygrywa najkrótsze rozwiązanie (w bajtach). Jak zwykle, nie pozwól, aby absurdalnie krótkie rozwiązania w językach golfowych zniechęcały Cię do publikowania dłuższych odpowiedzi w wybranym języku.
- Nie jest to regułą, ale twoja odpowiedź będzie lepiej odebrana, jeśli będzie zawierała link do przetestowania rozwiązania i wyjaśnienie, jak to działa.
Przykłady
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
Sprawdź ten link (dzięki uprzejmości Kevina Cruijssena ), aby obejrzeć przykłady.