Фон
Бінарне дерево є впровадженим деревом, кожен вузол має не більше двох дітей.
Мічена бінарне дерево являє собою бінарне дерево, кожен вузол позначений з позитивним цілим числом; більше того, всі етикетки відрізняються .
БСТ (бінарне дерево пошуку) являє собою мічений бінарне дерево , в якому мітка кожного вузла більше , ніж етикетках всіх вузлів в лівому поддереве, і менше , ніж етикетках всіх вузлів в його правого піддерева. Наприклад, таке BST:
Попереднє замовлення обхід міченого двійкового дерева визначаються наступним псевдо-код.
function preorder(node)
if node is null then
return
else
print(node.label)
preorder(node.left)
preorder(node.right)
Для кращої інтуїції див. Наступне зображення:
Вершини цього двійкового дерева друкуються у такому порядку:
F, B, A, D, C, E, G, I, H
Більше про BST можна прочитати тут , а більше про попереднє замовлення тут .
Виклик
З урахуванням переліку цілих чисел , ваше завдання - визначити, чи існує BST, чий обхід попереднього замовлення друкує саме .
Вхідні дані
- Непорожній список відмінних натуральних чисел .
- За бажанням, довжина .
Вихідні дані
- Значення " truthy", якщо - обхід попереднього замовлення деяких BST.
- Falsey значення в іншому випадку.
Правила
- Застосовуються стандартні правила для дійсних подань , вводу / виводу , лазівки .
- Це код-гольф , тому найкоротше рішення (у байтах) виграє. Як завжди, не дозволяйте смішно короткі рішення гофрованих мов відштовхувати вас від публікації більш довгих відповідей на обраній вами мові.
- Це не правило, але ваша відповідь буде краще отримана, якщо вона містить посилання для перевірки рішення та пояснення того, як воно працює.
Приклади
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
Перегляньте це посилання (люб’язно Кевін Круїссен ), щоб візуально переглянути приклади.