Contexte
Un arbre binaire est un arbre enraciné dont chaque nœud a au plus deux enfants.
Un arbre binaire étiqueté est un arbre binaire dont chaque nœud est étiqueté avec un entier positif; de plus, toutes les étiquettes sont distinctes .
Un BST (arbre de recherche binaire) est un arbre binaire étiqueté dans lequel l'étiquette de chaque nœud est supérieure aux étiquettes de tous les nœuds de son sous-arbre gauche et plus petite que les étiquettes de tous les nœuds de son sous-arbre droit. Par exemple, ce qui suit est un BST:
La traversée en précommande d'un arbre binaire étiqueté est définie par le pseudo-code suivant.
function preorder(node)
if node is null then
return
else
print(node.label)
preorder(node.left)
preorder(node.right)
Voir l'image suivante pour obtenir une meilleure intuition:
Les sommets de cet arbre binaire sont imprimés dans l'ordre suivant:
F, B, A, D, C, E, G, I, H
Vous pouvez en savoir plus sur les BST ici et en savoir plus sur le parcours de précommande ici .
Défi
Étant donné une liste d'entiers , votre tâche consiste à déterminer s'il existe un BST dont la traversée en précommande imprime exactement .
Contribution
- Une liste non vide d'entiers positifs distincts .
- Facultativement, la longueur d' .
Production
- Une valeur vraie si est la traversée de précommande de certains BST.
- Une valeur de falsey sinon.
Règles
- Règles standard pour les soumissions valides , les E / S , les failles s'appliquent.
- C'est le code-golf , donc la solution la plus courte (en octets) l'emporte. Comme d'habitude, ne laissez pas les solutions ridiculement courtes dans les langues de golf vous décourager de poster une réponse plus longue dans la langue de votre choix.
- Ce n'est pas une règle, mais votre réponse sera mieux reçue si elle comprend un lien pour tester la solution et une explication de son fonctionnement.
Exemples
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
Consultez ce lien (gracieuseté de Kevin Cruijssen ) pour avoir un aperçu visuel des exemples.