Fondo
Un árbol binario es un árbol enraizado cuyos nodos tienen como máximo dos hijos.
Un árbol binario etiquetado es un árbol binario cuyos nodos están etiquetados con un entero positivo; Además, todas las etiquetas son distintas .
Un BST (árbol de búsqueda binario) es un árbol binario etiquetado en el que la etiqueta de cada nodo es mayor que las etiquetas de todos los nodos en su subárbol izquierdo, y más pequeña que las etiquetas de todos los nodos en su subárbol derecho. Por ejemplo, el siguiente es un BST:
El recorrido de preorden de un árbol binario etiquetado se define mediante el siguiente pseudocódigo.
function preorder(node)
if node is null then
return
else
print(node.label)
preorder(node.left)
preorder(node.right)
Vea la siguiente imagen para obtener una mejor intuición:
Los vértices de este árbol binario se imprimen en el siguiente orden:
F, B, A, D, C, E, G, I, H
Puede leer más sobre BST aquí , y más sobre el recorrido de pre-pedido aquí .
Reto
Dada una lista de enteros , su tarea es determinar si hay un BST cuyo recorrido previo al pedido imprime exactamente .
Entrada
- Una lista no vacía de enteros positivos distintos .
- Opcionalmente, la longitud de .
Salida
- Un valor verdadero si es el recorrido de preorden de algunos BST.
- Un valor falso de lo contrario.
Reglas
- Se aplican reglas estándar para envíos válidos , E / S , lagunas .
- Este es el código de golf , por lo que gana la solución más corta (en bytes). Como de costumbre, no permita que soluciones ridículamente cortas en los idiomas de golf lo desalienten a publicar una respuesta más larga en el idioma de su elección.
- Esto no es una regla, pero su respuesta será mejor recibida si incluye un enlace para probar la solución y una explicación de cómo funciona.
Ejemplos
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
Consulte este enlace (cortesía de Kevin Cruijssen ) para tener una visión visual de los ejemplos.