Menu
CoddyTech

Validate Binary Search Tree

二叉树按堆顺序存储在数组 tree 中:根节点位于索引 0,索引 i 的子节点位于 2*i+1(左侧)和 2*i+2(右侧),-1 表示空位置,数组末尾可能有多余的 -1 项。

编写 isValidBST,如果这棵树是二叉搜索树,则返回 true,否则返回 false。在二叉搜索树中,每个节点的值都严格大于其左子树中的所有值,并且严格小于其右子树中的所有值。

函数

isValidBST(tree: integer-array) → boolean
treeinteger-array
按层序遍历二叉树,空位置用 -1 表示
返回值boolean
如果该树是二叉搜索树,则为真;否则为假

约束条件

  • 1 ≤ tree.length ≤ 32767
  • 每个 tree[i] 都是 -1,或满足 0 ≤ tree[i] ≤ 105 的值。
  • tree[0] 永远不会是 -1,所以这棵树至少有一个节点。
  • 数组最后一个节点之后可能还有额外的 -1 项。
  • 空位置的两个子节点也都是空的,并且深度最多为 14。
  • 值可以重复。

示例

输入
tree = [8, 3, 12, 1, 6, 10, 15]
输出
true
解释
按顺序读取(左子树、节点、右子树),得到的值是 1, 3, 6, 8, 10, 12, 15。这些值严格递增,因此每个节点都位于每个祖先节点的正确一侧。
challenge icon

进阶

节点的父节点位于索引 (i-1)/2 处,向下取整。你能否按顺序遍历这棵树,并且只用 O(1) 的额外空间,通过父节点移动,而不使用栈或递归?

重置代码
def isValidBST(tree):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

tree = [8, 3, 12, 1, 6, 10, 15]

预期输出

true