Menu
CoddyTech

Range Sum of BST

二叉搜索树按层序存储在数组 tree 中:根节点位于索引 0 处,索引为 i 的节点的左子节点和右子节点分别位于 2*i+1 和 2*i+2 处,-1 表示空位置。在二叉搜索树中,节点左子树中的每个值都小于该节点的值,右子树中的每个值都大于该节点的值。

返回所有满足 low ≤ v ≤ high 的节点值 v 的总和;如果没有这样的值,则返回 0。

函数

rangeSumBST(tree: integer-array, low: integer, high: integer) → integer
treeinteger-array
按层序遍历的二叉搜索树,空位用 -1 表示
lowinteger
要计数的最小值
highinteger
要计数的最大值
返回值integer
low 和 high 之间的节点值之和,包含两端

约束条件

  • 1 ≤ tree.length ≤ 32767
  • 每个 tree[i] 都是 -1,或者是满足 0 ≤ tree[i] ≤ 105 的值。
  • tree[0] 永远不会是 -1,因此这棵树至少有一个节点。
  • 数组末尾可能会在最后一个节点之后多出一些 -1 条目。
  • 空位置的两个子节点也都是空的,而且深度最多为 14。
  • 这棵树是有效的二叉搜索树,因此其中所有值都不相同。
  • 0 ≤ low ≤ high ≤ 105
  • 答案符合 32 位有符号整数的范围。

示例

输入
tree = [20, 8, 31, 3, 12, -1, 40, -1, -1, 10, 15]low = 9high = 31
输出
88
解释
从 9 到 31 的值有 10、12、15、20 和 31,它们的总和是 88。3、8 和 40 不在这个范围内。
challenge icon

进阶

如果你需要在同一棵树上回答数千个不同的 (low, high) 查询,怎样才能在 O(log n) 时间内回答每个查询?

重置代码
def rangeSumBST(tree, low, high):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

tree = [20, 8, 31, 3, 12, -1, 40, -1, -1, 10, 15]
low = 9
high = 31

预期输出

88