背景
一个二叉树是有根树,其每个节点最多有两个孩子。
带标记的二叉树是一个二叉树,其每个节点都用一个正整数标记。此外,所有标签都是不同的。
甲BST(二进制搜索树)是标记的二叉树,其中,每个节点的标签比其左子树的所有节点的标签比在其右子树的所有节点的标签更大和更小。例如,以下是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的预遍历打印的正好是。
输入项
- 包含正整数a的非空列表。
- 任选地,长度。
输出量
- 甲truthy值,如果是一些BST的预购遍历。
- 一个falsey值,否则。
规则
- 标准规定了有效的意见,I / O,漏洞适用。
- 这是代码高尔夫球,因此最短的解决方案(以字节为单位)获胜。像往常一样,不要让可笑的简短的高尔夫语言解决方案阻止您以您选择的语言发布更长的答案。
- 这不是规则,但是如果包含测试解决方案的链接以及其工作原理的说明,您的答案会更好。
例子
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
查看此链接(由Kevin Cruijssen提供),以直观的方式查看示例。